2011-08-23 40 views
1

我有一些零散的3D點(2D解就足夠了)。我想找到鋪設在附近的不同直線(至少有三個點成線)(比如說10個單位)。單點可以是不同線條的一部分。從分散點計算直線

+0

「我想要找到穿過的不同直線(至少有三個點成線),這些直線鋪設在附近(比如說10個單位)。」不是一句話,所以很難說出你想做什麼。 –

+0

如果一條線只通過2個點,忽略此線 – Razack

+0

調用你的一組點S.我是對的,你想找到所有子集S⊆S的基數至少爲3,這樣s中的點就是「接近」共線? –

回答

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)是共線的。實際上,叉積與三角形面積成正比,因此如果需要,可以設置一個非零的小公差。

Re。公差。

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

你或許可以用給您的問題描述一個絕對公差比較:

b到線Vac的距離由下式給出。或者您可以使用:

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

然後theta是兩個向量之間的角度,可以用固定公差進行比較。

+0

謝謝。你認爲恆定的非零容差或容差取決於兩點之間的距離 – Razack