Skip to content

两条隐式直线的相交性检测

分为在2D和3D的情况

2D

2D中的相交性检查比较简单,联立方程组求解即可

{xa1+yb1=d1xa2+yb2=d2

求得相交点的表达式

x=b2d1b1d2a1b2a2b1y=a1d2a2d1a1b2a2b1
  • 只有一个解,意味着只有一个交点
  • 有无穷多个解,分母为0,意味着两条直线重合
  • 没有解,分母为0,意味着两条直线平行

img.png

3D

在3D中有两条射线,分别是r1、r2

r1(t1)=p1+t1d1r2(t2)=p2+t2d2

为了具有一般性,我们不限制t的范围,也不限制d为单位向量。

相对于2D中的直线相交性检查,3D中会存在两个直线不再同一个平面上,所有有以下4种情况

  • 在同一个平面上
    • 两条射线交与一点
    • 两条射线平行
    • 两条射线重合
  • 不在同一个平面上

那么在3D中两条射线的交点有

t1=((p2p1)×d2)(d1×d2)d1×d22t2=((p2p1)×d1)(d1×d2)d1×d22
  • 两条射线平行或重合,d1、d2的叉乘为0,相应的分母为0
  • 如果两条射线不在一个平面,那么p1(t1)、p2(t2)是相距最近的点

上述讨论并没有限制射线的长度,如果有长度限制,那么需要做适当的边界检查