我嘗試編寫計算點線距離的代碼。我在互聯網上發現了很多計算結果,但我不確定我是否理解。我發現了一些線條方程,它看起來像用於計算三維點平面距離的方程。我認爲這是相同的,但在二維。點線距離計算
我有一些3D點平面距離計算的經驗。餘計算的參數A,B,C,d從3分VEC3(平面的定義),並獲得距離只是應用此方程式與VEC3點(X,Y,Z)。
平面方程:AX + +鋯= d
線方程應該是:AX + = C
線方程應與VEC2點工作與之相似通過應用等式(x,y)。
我的問題是如何計算參數A,B,C從這個方程與2分VEC2(線定義)?
任何簡單的編程/數學解釋?
平面含3分:
Plane(vec3 p0, vec3 p1, vec3 p2) {
vec3 v = p1 - p0;
vec3 u = p2 - p0;
vec3 n = cross(v, u);
normalize(n);
//Result A,B,C,D
A = n.x;
B = n.y;
C = n.z;
D = dot(vec3(-n.x, -n.y, -n.z), p0);
}
平面含2分:
Line(vec2 p0, vec2 p1) {
//...
//Result A,B,C
A = (?);
B = (?);
C = (?);
}
感謝。
PS:對不起,我的英語。 :/
更新:
解決了!
我在計算小時後找到答案,它與平面方程相似。
編程:
Line(vec2 p0, vec2 p1) {
vec2 l = p1 - p0;
vec2 n = l.cross();
n.normalize();
//Result a,b,c
a = n.x;
b = n.y;
c = vec2::dot(vec2(-n.x, -n.y), p0);
}
的區別是在VEC 2的交叉產品。這是成才這樣的:
vec2 cross(vec2 p) { //Only one parameter
return vec2(y, -x);
}
數學:
P1 - 啓動線
的點P2 - 線
1)N = X(P2的終點 - P1)
其中「x」是cro (交換元素和否定元素x)的ss產物---> x(V)= [Vy,-Vx]
(我不確定此操作是官方的,但結果應該是向量與該參數垂直)
2)N = N/| N |(正常化矢量N)
當| N |是向量N長度
3)結果A:一個= NX
4)結果B:B =尹恩惠
5)N'= -N
6)結果C:C =(N ')(P1)
其中,「(N')(P1)。「是矢量n點產品」和P1
PS:
此公式d =(|(X_2-X_1)×(X_1-X_0)|)/(| X_2-X_1 |)是正確的。有用。但我需要使用公式ax + by + c = 0,因爲我需要知道它是在左側還是右側(負的距離爲正值),並且它更適合編程。感謝您的回答。
對不起我的英語。 :D
是的,我想找到之間的距離。線和第三點。但我想在2D而不是3D中做到這一點。我不想要確定A,B,C,d爲平面從2點,但只有A,B,C作爲線由+ C = 0。我用這個[點 - 線Distance--使用方程AX + 2維(http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html),但沒發現的參數A,B和C,如果我已經由線2個VEC2點定義的計算。你可以幫我嗎?謝謝。 – eSeverus
2-d的情況下是3-d式I給出的一種特殊情況。剛剛成立的所有z分量爲0(但是,爲什麼提的飛機在所有如果你只關心兩個維度?) –
它的工作原理。非常感謝。 – eSeverus