2013-11-09 63 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