2015-01-01 38 views
-1

我正在寫一個定義3D幾何體的小型庫,以及每個幾何體的很多有用的功能。我將Point3D定義爲具有3個雙精度座標,每個座標軸一個,Line3D具有2個Point3D。在Line3D類中,我想要一個方法,它會返回最接近Point作爲參數傳遞的點上的點。3維線上的最近點到另一點

沒有人知道如何做到這一點?

(順便說一句,我不是在尋找的距離,但上線本身

回答

0

查詢從該點垂直於第一線的線實際點。然後,你必須在兩個未知數兩個方程,這可以解決的。解決的辦法是交叉點。實現這一點。有關詳細信息,請參見this

+0

那麼你如何找到垂直於該點的線?我爲二維線做了一個類似的方法,並有相同的想法,但它最終更容易做別的事情,但是其他的東西並沒有真正轉化爲3D的東西......得到了其他想法,(或工作代碼爲這一個)? – Totalllyrandomguy

0

咱們線兩點P0和P1,以及一些點P 定義查找歸一化的方向向量

d =(P1 - P0)/長度(P1 - P0

和矢量

W¯¯ = P - P0

最近的點P (b)在線是

= d * ScalarProduct(W¯¯d

這並不是說此方法既適用2D情況和用於3D。

enter image description here

1

讓行是P0P1和額外的點Q

線的參數方程是

P = P0 + t (P1 - P0) 

的平方距離PQ²

(P0 - Q + t (P1 - P0))² = t² (P1 - P0)² + 2 (P1 - P0)(P0 - Q) t + (P0 - Q)² 

您通過取消拳衍生WRT t找到最低:

2 t (P1 - P0)² + 2 (P1 - P0)(P0 - Q) = 0 

這給你t,然後P

+0

對不起,我還沒有采取計算,這是如何導致在線上的最接近點? (我必須誠實......我不確定這兩者是什麼意思......) – Totalllyrandomguy