石鑫华视觉 发表于 2020-9-16 18:14:20

VBAI角度计算时向量2为270度时覆盖的弧线不正确

VBAI角度计算时向量2为270度时覆盖的弧线不正确
在VBAI中几何函数中有角度计算函数,包含了三个点的方式,也有四个点的方式。但是,在这里覆盖表示角度的弧线时(四个点时需要两线的起点重合),当线2(向量2)的角度为270度时(即起点在上,终点在下的垂直线段),这时覆盖的表示角度的弧线不正确。只覆盖到了线为90度的情况,另外180度没有覆盖。



向量2垂直向下时错误的覆盖

向量2角度为270度时错误的覆盖

向量1为270度向量2不是270度时,没有错误。

不垂直的向量2也是正常的

不垂直的向量2也是正常的

三点式的角度计算时,向量2为270度时,也是不正确的覆盖

经导出VI到LabVIEW研究后发现,里面有个Overlay Angle覆盖角度的函数,这个函数里,有三个问题。第一、d = (dx1==0)? (dy1==0)? 0:(dy1>0)? pinf:-minf:(dy1/dx1);这个条件表达式中,-minf是有问题的,本身minf已经被赋值为负无穷大了,再加一个负号,则又变成了正无穷大,与前面的pinf表示的正无穷大一样的,所以也就导致无论是90还是180度,输出的都是正的90度的情况下的值。第二、A1 = (dx1<=0)?(R1 + 180):(dy1<0)?(R1+360):R1;这里的条件dx1<=0与下面的A2的条件比,多了一个=,真实的条件应该是dx1<0。如果使用=0的情况,则将A1、A2都是270度时,输出的角度应该是0或360度,但是实际上,则为180度,错误。第三,最后一条的角度输出,A = (A3>0)? (A3-360) : A3;,其中使用到了A3,但是A3没有做相应的定义。按照NI视觉中的角度定义,逆时针旋转时为正,顺时针为负,这里的A3应该是向量1到向量2的角度,那就是A2-A1。而后面的条件表达式,符号也有问题。应该是A = (A3>0)?A3: (360+A3) ;,即角度大于0时,就使用角度本身,而当角度小于0时,为负值时,则加360度,将其转换为正值。



页: [1]
查看完整版本: VBAI角度计算时向量2为270度时覆盖的弧线不正确

LabVIEW HALCON图像处理入门教程(第二版)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24