在机器视觉中表示两个坐标系的映射关系一般用矩阵表示 。
下面的知识则是使用三角函数推导两者的关系。
(一)坐标系原点旋转的情况
如下图所示,有两个坐标系,绿色的XOY, 红色的X'OY'。
点P(x,y)在坐标系XOY中是(300,350),现在我们想求点P在红色坐标系X'OY'中的位置?
我们按推算公式一计算一下,则:
x'=OD+DF=x*cos(20)+y*sin(20)
y'=PC-FC=y*cos(20)-x*sin(20)
>> 表达式: 300*cos(20)+350*sin(20) 401.614836 命令: cal >> 表达式: 350*cos(20)-300*sin(20) 226.286374
我们的计算结果跟CAD标注的有点小差别,这个现象勇哥有点不解,就解释为CAD捕捉的误差吧。
(图1)
为了证明数学公式计算的理论值是准确的,问题出在autocad的标注误差,勇哥用数学工具画了一遍上面的例子。
(图2)
结果是:p (7.69,3.59)
然后用公式计算一下理论值:
命令: cal >> 表达式: 6*cos(20)+6*sin(20) 7.69027658 命令: cal >> 表达式: 6*cos(20)-6*sin(20) 3.58603486
可以看到如果第三位四舍五入的话,结果是完全无误的!!
因此各位做理论验证,最好用专业的数学工具来绘图计算。
但是数学工具GeoGebra缺点是画线条是没有像autocad那么灵活。真是各有各的好处。
(二)坐标系移动旋转复合变换的情况
接下来看旋转+位移(复合变换)后的坐标系怎么进行点转换。
先给出两个公式推导的过程,然后再验证效果。
推导公式一,如下:
(图3)
结论就是:
x=x'*cos(θ)+y'*sin(θ)+a
y=y'*cos(θ)-x'*sin(θ)+b
推导公式二,如下:
(图4)
(图5)
这个公式二理论上也是可以转为公式一的。公式一更加巧妙精简一些。
下面我们来验证公式的效果:
为了方便代入实际数值进行计算,勇哥画了一个示意图,我们按公式一来解一下:
其中基坐标系为xy坐标系。E'DE''为复合变换后的坐标系,其中B点在这个坐标系中的位置为(2.56, 1.2)
θ=20度
现在我们要求B点在基坐标系中的坐标。
(图6)
按上面的公式:
x=x'·cos(θ)+y'·sin(θ)+a
y=y'·cos(θ)-x'·sin(θ)+b
其中x'y'=(2.56,1.2)
θ=20度
a,b=(4,4)
计算结果如下:
命令:CAL >> 表达式: 2.56*cos(-20)+1.2*sin(-20)+4 5.99518894 命令:cal >> 表达式: 1.2*cos(-20)-2.56*sin(-20)+4 6.00320271
如图3所示,答案就是(6,6)
这里有个问题,为啥是-20度呢。
这个要看你的坐标系是怎么转动才与基坐标系的X轴水平,如果是顺时针转的就是负角。
接下来我们反解一下,已知B点在基坐标下为(6,6),求解B点在复合变换坐标系下的坐标
(答案是(2.56, 1.2))
。。。。。
先略,暂时没推算出来,以后再补充。
2020/8/15勇哥注:反解推算出来了,见后面的介绍。
我们来对比看看autocad中的坐标系变换的效果吧。
使用指令ucs, obj方式,点击蓝色矩形的X轴所在的线。
cad已经把坐标系切换成了蓝色矩形框所在的坐标系,可以观察到xyz指示图标变化了,并且鼠标指针也变化了。
这个时候点击圆心,可以看到圆心的坐标为(724.1483, 837.4397),这个值是圆心在蓝色坐标系下的值 。
按上面的经验,我们还要得到偏移距离 (a,b),和两个坐标系X轴的夹角。
其值如下:
好了,我们算一下这个圆心在红色坐标系中的值是多少:
命令: cal >> 表达式: 724.1483*cos(-10)+837.4397*sin(-10)+369.3 937.026982 命令: CAL >> 表达式: 837.4397*cos(-10)-724.1483*sin(-10)+99.62 1050.08414
上面是理论计算的值,我们看看CAD的结果:
稍有误差,不过没关系,不是我们的错。
(三)反解
上面提过:
已知B点在基坐标下为(6,6),求解B点在复合变换坐标系下的坐标
(答案是(2.56, 1.2))
反解出的公式推导如下:
勇哥试了一下,用这个公式可以反解出图6的正确答案是(2.56, 1.2)。
即已知基坐标系的点,求出复合变换后坐标系对应点的坐标。
尾声:
本来这个贴子的标题是说要提供C#代码的,不过因为公式比较简单,似乎没这个必要了吧!
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

