geometry - 在对几何形状进行数学计算时避免被零除的最佳方法

标签 geometry coordinate-systems divide-by-zero

我正在专门的运动 Controller 硬件上进行编码,该硬件使用 Visual Basic 语言的子集作为其编程语言。我需要对给定点进行一些计算,例如获取穿过 3 个不同点的弧的中心坐标;移动线、获取两条线的交点坐标等...

我使用笛卡尔坐标系进行计算。处理除以零情况时代码似乎会变得臃肿。

那么,进行此类计算的最佳坐标系是什么?或者保持此类代码较小的最佳方法是什么?

示例

给出经过 3 个点的圆弧的中心点坐标的代码如下:

    ' p1: (px1, py1)  p2: (px2, py2) p3: (px3, py3)
    ' ----------------------------------------------

    m_r=(py2-py1)/(px2-px1) ' slope of the line between p1 and p2
    m_t=(py3-py2)/(px3-px2) ' slope of the line between p2 and p3

    center_x=(m_r*m_t*(py3-py1)+m_r*(px2+px3)-m_t*(px1+px2))/(2*(m_r-m_t))
    center_y=(-1/m_r)*(x_mrk-(px1+px2)/2)+(py1+py2)/2

正如您所看到的,有很多情况会导致除以零异常。我应该使用 if/else 结构还是有更好的方法?

最佳答案

当你计算经过3个点的圆弧的中心点时,你肯定需要检查这些点是否位于同一条线上。但重写表达式

if (py2-py1)/(px2-px1) = (py3-py2)/(px3-px2)

避免 split

Det = (py2-py1) * (px3-px2) - (py3-py2) * (px2-px1) 
if Det = 0 then ... `bad case

对于其他情况(Det<>0)弧存在,并且可以找到没有零除误差的中心坐标

center_x= ((py2-py1) * (py3-py2) * (py3-py1) + 
          (py2-py1) *(px2+px3) * (px3-px2) - 
          (py3-py2) * (px1+px2) * (px2-px1)) / (2 * Det)

关于geometry - 在对几何形状进行数学计算时避免被零除的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640678/

相关文章:

java - 单位圆程序舍入

r - 如何将城市点映射到美国 map 并移动坐标以留出区域之间的空间?

python - Numpy 运行时警告 : divide by zero encountered in log10

python - 如何在python numpy中引发nan值的错误

python - 获取两个多边形相交区域的坐标(在 Python 中)

python - 如何在 Python 中使用图像处理找到物体的直径?

ios - 如何在iOS上将矩形png弯曲成圆形?

android - android屏幕坐标如何工作?

ios - 将 UIView 原点转换为其窗口坐标系

java - try-catch 除以零