三维线交叉算法

AMH*_*AMH 2 algorithm 3d geometry

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

并且两个点A,B,I使用B-A的线段

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

最好的祝福

Ric*_*bby 8

方程组:

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

D1:(x, y, z) = (x1, y1, z1) + t1(a, b, c)
Run Code Online (Sandbox Code Playgroud)

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

 D2:(x, y, z) = (xa, ya, za) + t2(xb-xa, yb-ya, zb-za)
Run Code Online (Sandbox Code Playgroud)

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

如果没有解决方案,则没有交叉点.

仅与段相交:

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

t2 in [0,1] 

 or  0<AM.AB<||AB||^2 (M is in the segment AB)
Run Code Online (Sandbox Code Playgroud)

备注:

如果你的线的表示来自笛卡尔方程(计划的交集),那么问题是相同的,但有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)
Run Code Online (Sandbox Code Playgroud)

(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)是解