Algorithm 三维直线相交算法

Algorithm 三维直线相交算法,algorithm,3d,geometry,Algorithm,3d,Geometry,我用x,y,z来确定线的方向 两点A,B,我用线段B-A 如何获得它们之间的交点 向方程组致意: 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) 具有方向(a,b,c)和一个点X(x1,x2,x3)的直线的参数方程为: 具有2个点a和点B的直线的参数方程为: D2:(x, y, z) = (xa, ya, za) +

我用x,y,z来确定线的方向

两点A,B,我用线段B-A

如何获得它们之间的交点


向方程组致意:

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)
具有方向(a,b,c)和一个点X(x1,x2,x3)的直线的参数方程为:

具有2个点a和点B的直线的参数方程为:

 D2:(x, y, z) = (xa, ya, za) + t2(xb-xa, yb-ya, zb-za)
您只需要将D1和D2相等,就可以得到结果,找到将起作用的参数t1和t2。(3个方程,2个未知)

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

仅与线段相交:

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)
现在让M为您的结果,您只需验证:

t2 in [0,1] 

 or  0<AM.AB<||AB||^2 (M is in the segment AB)
(D1和D2是放置在0,0,0上的边=1的立方体的两条对角线)

设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)是解决方案

将直线转换为线性方程组,然后将它们组合并求解生成的系统如果直线根本不相交怎么办?这很可能是3D中1D线的情况。第一条线是否穿过原点,因为你只有一个方向?如果你尝试正确地陈述问题,你实际上可以自己轻松地解决它。你知道你已经在3D中写了一个平面的方程,因为有无穷多的n与AB正交。啊哈,对不起,是的,我会纠正它。直线的参数方程是:(x,y,z)=(x1,y1,z1,)+t(a,b,c),其中a,b,c是方向向量,你能给我更多细节吗,我不明白,我把直线方向作为向量,x,y,zcomponenet@AMH,好的,更正了,想法是一样的。对不起,这是我的错mistake@Ricky现在看来是对的。顺便说一下,对于段检查,您还可以测试t2是否在[0,1]中。