三维线交叉算法

时间:2011-08-10 11:55:36

标签: algorithm 3d geometry

我有使用x,y,z的行方向

和两个点A,B,我使用B-A

的线段

如何获得它们之间的交叉点

祝你好运

1 个答案:

答案 0 :(得分:8)

方程组:

具有方向(a,b,c)和一个点X(x1,x2,x3)的线的参数方程是:

D1:(x, y, z) = (x1, y1, z1) + t1(a, b, c)

具有2点A和B的线的参数方程是:

 D2:(x, y, z) = (xa, ya, za) + t2(xb-xa, yb-ya, zb-za)

你只需要均衡D1和D2以获得结果,找到可行的参数t1和t2。 (2个未知的方程式)

如果没有解决方案,则没有交集。

仅与细分市场交叉:

现在让M成为你需要验证的结果:

t2 in [0,1] 

 or  0<AM.AB<||AB||^2 (M is in the segment AB)

<强>备注:

如果你的线的表示来自笛卡尔方程(计划的交集),那么问题是相同的,但有4个方程式,3个未知

示例:

A (1,1,1)
B (0,0,0)
D2:(x,y,z)=(1-t2,1-t2,1-t2)

(a,b,c)=(1.-1.1)
(x1,y1,z1)=(1,0,1)
D1:(x,y,z)=(t1+1,-t1,1+t1)

(D1和D2是侧面立方体的2个对角线= 1放置在0,0,0上)

令M(x,y,z)为交点D1,D2

我们发现t1和t2均衡上述等式:D1和D2

我们很容易 t1 = -1 / 2且t2 = 1/2

此外t2在[0,1]中,因此得到的交点在[A,B]

M(1 / 2,1 / 2,1 / 2)= D1(t1)= D2(t2)是解决方案