2014-12-13 45 views
-1

enter image description here如何知道點的位置,垂直於線

有2點A(A,B,C),B(d,E,F)

enter image description here

有是直線AB,連接A和B

線CC」是垂直於線AB

欲點C‘上的CC’線

的立場

如果CC'行的長度是1,C的位置是什麼?

如何計算C的統一位置?

答:的Vector3(A,B,C)

B:的Vector3(d,E,F)

AC '長度= BC' 的長度

CC」長度= 1

AB垂直於CC」

- (?,?,?)>ç的Vector3

+0

你知道C點嗎?在沒有關於C'的一些信息的情況下確定C是不可能的,例如確切的座標或沿着它定位的線AB的距離。你能否澄清你知道什麼信息以及你想要找到什麼。 – Homar 2014-12-13 18:17:08

+0

你想實現什麼?請澄清。你已經知道CC'了嗎?你在說2D或3D點和線嗎?如果3D,相對於AB位於線CC'的哪個角度? – j00hi 2014-12-13 19:41:08

+0

謝謝您的關注 我補充問題 – user2523112 2014-12-14 00:50:01

回答

1

正如你所描述的那樣,問題是不確定的。因爲您正在3D空間中工作,因此有無限多的解決方案C。爲了可視化,想象圍繞軸線AB圍繞軌道運行的點C。無論C處於其軌道中,它將始終與AB和length(CC') = 1正交。你需要進一步限制問題。

的數學

首先,我們計算點C'。爲此,我們從AB,這是AB = B - A。然後,去C'我們只是從旅遊點AAB一半的距離:

C' = A + AB/2

現在,我們需要找到一個向量垂直於AB。這裏我們遇到了最初描述的問題。無限多的這種向量,所以我們需要進一步限制這個問題。假設我們可以選擇與線ABC'C不共線的矢量v。現在我們可以找到C'C,方法是找到與ABv正交的向量。

我們知道兩個線性獨立向量的叉積產生一個與兩個向量都正交的向量。因此,所有剩下要做的就是正常化的結果,這樣的長度爲1:

C'C = normalize(AB x v)

最後,我們可以通過從C'沿矢量C'C旅行找到點C

C = C' + C'C

統一碼

在這裏,我提供了一些未經測試的代碼,簡單地實現了上述數學。我對Unity並不是非常熟悉,所以很可能存在一些內置函數來緩解一些工作:

Vector3 v = new Vector3(0, 0, 1); // Choose this as you wish 
Vector3 AB = B - A; 
Vector3 C_prime = A + AB/2; 
Vector3 C = C_prime + Vector3.Normalize(Vector3.cross(AB, v)); 
+0

感謝您的回答 這正是我想要的。 – user2523112 2014-12-14 09:52:25