おたくのスタジオ

线段相交判定

判断两直线相交是一件很容易的事情。那么,如何判断两个线段相交呢?直线在两端无限延长,而线段在两端都有限制。

解决这个问题的窍门就是每条线段都用参数式来表示。设有线段$S_1$,$S_2$,假设$U$为$S_1$上任意一点,$V$为$S_2$上任意一点,则有:

$$
U = p_0 + t * S_1
$$

$$
V = p_1 + s * S_2
$$

约束条件:($0 \leq t \leq 1$),($0 \leq s \leq 1$),如图所示。

line-seg-intersection-a

当$U=V$时,可以联立方程,利用克莱姆法则,解出($s,t$)。当且仅当$s,t$都在0~1范围内才有效。若其中一个没有落在这个范围内,线段就没有交点。