UVA191 Intersection 题解
水紫,建议降蓝。
解法
求线段相交裸题,考虑使用向量解决。
我们把矩形的 4 4 4 个点两两相连,得到 6 6 6 条线段,如果先输入的线段和这 6 6 6 条线段都没有交点,则认为线段和矩形不相交,否则认为相交。
向量求两线段是否相交分为两步,快速排斥实验和跨立实验。为了表述方便,我们记两线段分别为 A B , C D AB,CD AB,CD。
快速排斥实验
分别以 A B AB AB 和 C D CD CD 为对角线做水平竖直的两个矩形。如果两个矩形没有相交部分,那两线段不可能相交,我们称为未通过快速排斥实验。否则我们称为通过快速排斥实验。如图。
跨立实验
当两线段通过快速排斥实验后,则进行跨立实验。跨立实验即为:验证点 C , D C,D C,D 是否在直线 A B AB AB 的两侧同时点 A , B A,B A,B 是否在直线 C D CD CD 的两侧。
根据向量叉乘的几何意义, A B → × A C → \overrightarrow{AB} \times \overrightarrow{AC} AB×AC 为正代表点 C C