C#代码  实现点在多个二维坐标系中进行换算

在机器视觉中表示两个坐标系的映射关系一般用矩阵表示 。

下面的知识则是使用三角函数推导两者的关系。



(一)坐标系原点旋转的情况


如下图所示,有两个坐标系,绿色的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捕捉的误差吧。

image.png

(图1)


为了证明数学公式计算的理论值是准确的,问题出在autocad的标注误差,勇哥用数学工具画了一遍上面的例子。

image.png

(图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那么灵活。真是各有各的好处。


(二)坐标系移动旋转复合变换的情况


接下来看旋转+位移(复合变换)后的坐标系怎么进行点转换。

先给出两个公式推导的过程,然后再验证效果。


推导公式一,如下:


image.png

(图3)


结论就是: 

x=x'*cos(θ)+y'*sin(θ)+a

y=y'*cos(θ)-x'*sin(θ)+b



推导公式二,如下:

image.png

(图4)


image.png

(图5)

这个公式二理论上也是可以转为公式一的。公式一更加巧妙精简一些。


下面我们来验证公式的效果:

为了方便代入实际数值进行计算,勇哥画了一个示意图,我们按公式一来解一下:

其中基坐标系为xy坐标系。E'DE''为复合变换后的坐标系,其中B点在这个坐标系中的位置为(2.56, 1.2)

θ=20度

现在我们要求B点在基坐标系中的坐标。

image.png

(图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中的坐标系变换的效果吧。

image.png

使用指令ucs, obj方式,点击蓝色矩形的X轴所在的线。

cad已经把坐标系切换成了蓝色矩形框所在的坐标系,可以观察到xyz指示图标变化了,并且鼠标指针也变化了。

image.png

这个时候点击圆心,可以看到圆心的坐标为(724.1483,  837.4397),这个值是圆心在蓝色坐标系下的值 。

image.png

按上面的经验,我们还要得到偏移距离 (a,b),和两个坐标系X轴的夹角。

其值如下:

image.png

好了,我们算一下这个圆心在红色坐标系中的值是多少:

命令: 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的结果:

image.png


稍有误差,不过没关系,不是我们的错。



(三)反解


上面提过:

已知B点在基坐标下为(6,6),求解B点在复合变换坐标系下的坐标

(答案是(2.56, 1.2))


反解出的公式推导如下:

image.png

image.png

勇哥试了一下,用这个公式可以反解出图6的正确答案是(2.56, 1.2)。

即已知基坐标系的点,求出复合变换后坐标系对应点的坐标。



尾声:

本来这个贴子的标题是说要提供C#代码的,不过因为公式比较简单,似乎没这个必要了吧!



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年9月   »
123456
78910111213
14151617181920
21222324252627
282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
标签列表
搜索
最新留言
最近发表
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:

Powered By Z-BlogPHP 1.6.0 Valyria

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864