计算散乱点的直线

时间:2011-08-23 05:54:19

标签: geometry

我有一些零散的3D点(2d解决方案就足够了)。我希望找到不同的直线(至少有三个线构成线)放在附近(例如10个单位)。单点可以是不同线的一部分。

1 个答案:

答案 0 :(得分:2)

要确定3个点(a,b,c)是否在一行中,请使用交叉积(2D或3D):

V = (Vx, Vy, Vz)
Vab = b - a
Vac = c - a 
CrossProd (V,W) = (VyWz - VzWy, VzWx - WzVx, VxWy - WxVy)

如果CrossProd(Vab, Vac)为零,则点(a, b, c)为共线点。实际上,叉积与三角形(a, b ,c)的面积成正比,因此如果需要,您可以设置一个小的非零容差。

重新。耐受性。

b到第Vac行的距离由下式给出:

d = length(CrossProd(Vab, Vac))/ length(Vac)

您可以根据问题描述将其与绝对容差进行比较。或者,您可以使用:

sin(theta) = length(CrossProd(Vab, Vac))/ length(Vac)/ length(Vab)

然后theta是两个向量之间的角度,可以与固定的公差进行比较。