当前位置:  开发笔记 > 编程语言 > 正文

相交的3D线

如何解决《相交的3D线》经验,为你挑选了1个好方法。

如何确定两条3D线段是否与每条线的起点和终点的XYZ坐标相交?如果他们相交,在什么XYZ?

我只能找到2D线的答案:你如何检测两个线段相交的位置?



1> MBo..:

我们的起点是P0,Q0,终点是P1,Q1.

Direction vectors
DP = P1 - P0
DQ = Q1 - Q0
start difference vector
PQ = Q0 - P0

以参数形式分段:

P = P0 + t * DP
Q = Q0 + u * DQ

找到价值观

a = Dot(DP, DP)
b = Dot(DP, DQ)
c = Dot(DQ, DQ)
d = Dot(DP, PQ)
e = Dot(DQ, PQ)

找出判别力

DD = a * c- b * b

如果DD = 0,则段是平行的,并考虑(部分)重合的特殊情况,否则

查找线上最近点的参数

tt = (b * e - c * d) / DD
uu = (a * e - b * d) / DD

如果任何参数超出范围0..1,则段不相交,否则

找到点之间的距离

 P(tt) = P0 + tt * DP
 Q(uu) = Q0 + uu * DQ
 Dist = Length(Q(uu) - P(tt))

如果Dist为零(或由于数值误差而小于一些小的Epsilon值,如1.0E-12),那么段在此点P(tt)相交

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有