这道题也是一道经典的面试题,即分别给出两条线段在平面直角坐标系下的端点坐标,判断这两条线段是否相交(这里的相交定义为有且只有一个公共点)。
这道题如果用传统的解析几何思维,那就是求出这两条线段所在直线的方程,判断是否平行,若不平行,再算出两直线的交点,最后计算交点是否在线段上。这样做思路比较简单,但是实现起来可能会遇到各种各样的问题,例如若线段所在直线倾角等于或接近90°,在计算过程中会出现除数等于0或非常接近0的情况,这种情况下可能会出现较大的精度损失,不是一种明智的方法。
对于两条线段,如果相交则有以上两种情况:
1)每条线段都分别跨越了另一条线段所在直线,即两个端点分别在该直线两侧;
2)一条线段的端点恰好在另一条线段上。
这里我们可以用向量叉积来判断跨立条件,如下图所示,如果线段ab跨立了线段cd所在的直线,那么作向量ca、cd和cb,其中ca×cd和cb×cd的正负号应该是不同的。即满足
ca×cd和cb×cd < 0
考虑到情况2),上式等于0的情况也成立,因此,判断线段ab跨立线段cd所在直线的的条件为