问题:平面坐标系中,给定两条线段,已知这两条线段的各个端点坐标,判断这两条线段是否相交?如果相交,求出交点坐标。
首先,我们罗列出所有两条线段相交时的场景,如下图:
总共有8种场景。
我们再仔细分析这些场景,我们会发现第5、第6、第7和第8这四种场景有一个共同特点是:存在线段的端点重合,而剩余的其它四个场景是不存在线段端点重合的。
有端点重合的情况
我们先分析有端点重合的场景。
当发现一个端点存在重合时,我们再判断剩余的端点是否也是相等。
如果另一个端点也是相等的,则视为第7种场景,即两条线段是相同线段,完全重合;
如果另一个端点不相等,我们则将不相等的两个点连接成向量(下图中第5、第6、第8场景中表示A、C两点连成向量,当然连成向量也是一样的。图中我们用红色表示非重合点连接而成的新向量,用绿色表示原先的一条线段所代表的向量),如下图所示:
我们再将向量与原先的任一条线段向量作叉乘
如果叉乘结果不为0,表示新向量