石鑫华视觉论坛

 找回密码
 注册会员
查看: 1804|回复: 0

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

[复制链接]
  • TA的每日心情
    擦汗
    7 小时前
  • 签到天数: 3382 天

    连续签到: 4 天

    [LV.Master]2000FPS

    发表于 2020-9-16 18:14:20 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

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


    QQ截图20200916170733.png
    向量2垂直向下时错误的覆盖
    QQ截图20200916173012.png
    向量2角度为270度时错误的覆盖
    QQ截图20200916172929.png
    向量1为270度向量2不是270度时,没有错误。
    QQ截图20200916173026.png
    不垂直的向量2也是正常的
    QQ截图20200916173034.png
    不垂直的向量2也是正常的
    QQ截图20200916173838.png
    三点式的角度计算时,向量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度,将其转换为正值。



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

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

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-20 15:20

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表