我尝试编写计算点线距离的代码。我在互联网上发现了很多计算结果,但我不确定我是否理解。我发现了一些线条方程,它看起来像用于计算三维点平面距离的方程。我认为这是相同的,但在二维。点线距离计算
我有一些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