2013-11-09 66 views
0

我嘗試編寫計算點線距離的代碼。我在互聯網上發現了很多計算結果,但我不確定我是否理解。我發現了一些線條方程,它看起來像用於計算三維點平面距離的方程。我認爲這是相同的,但在二維。點線距離計算

我有一些3D點平面距離計算的經驗。餘計算的參數A,B,C,d3分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

回答

6

從你的問題中不清楚,但它聽起來像你有一個由兩點定義的線,你想找到該線和第三點之間的距離?正如你所看到的,你不能從兩個點唯一地確定A,B,C和D - 有無數個包含該線的平面。

如果X_1和X_2是代表點定義的直線3-d載體和X_0是 你試圖找到的距離點,其公式爲:

d = (|(x_2-x_1)x(x_1-x_0)|)/(|x_2-x_1|) 

(在該式中,「x」表示的3-d叉積,「 - 」表示向量減法,| v |表示矢量v的長度)

Point-Line Distance--3-dimensional

+0

是的,我想找到之間的距離。線和第三點。但我想在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

+0

2-d的情況下是3-d式I給出的一種特殊情況。剛剛成立的所有z分量爲0(但是,爲什麼提的飛機在所有如果你只關心兩個維度?) –

+0

它的工作原理。非常感謝。 – eSeverus