前言
两个凸多边形的重叠问题就是对两个凸多边形求相交部分的问题。约定凸多边形指它的边界和内部,凸多边形仍用顶点坐标的逆时针方向序列确定。
设给出的两个凸多边形 P 和 Q 的顶点序列分别是 P1,P2,…,PL 和 Q1,Q2,…,Qm。
假设 P 的边界上不包含 Q 的顶点 ,Q 的边界也不包含 P 的顶点。有两个问题需要解决:
- 如何
有次序
地求出各边的所有交点 , - 如何
排列
求出的交点
和原凸多边形的顶点
, 形成新的凸多边形的顶点序列。
求交点
为了有次序
地求出交点 , 可以在两个多边形边上交替地前进
,原则是在哪个多边形的边上可能有交点就等待 , 在另一个多边形的边上前进。
前进的原则可以自己随便定义,但是得满足以下两个要求(后面会解释):
- 两个多边形向前走的机会相同
- 所有情况都要覆盖
初始从 对边 P 0 P 1 与 Q 0 Q 1 P_0P_1 与 Q_0Q_1 P0P1与 Q0Q1 的求交 开始 , 注意所有求交是线段的求交
。这里规定了 P 0 = P L , Q 0 = Q m P_0=P_L,Q_0=Q_m P0=PL,Q0=Qm。
设已经算得 P i − 1 P i 和 Q j − 1 Q j P_{i-1}P_i 和 Q_{j-1}Q_j Pi−1Pi和 Qj−1Qj 的交点
- 依可能性判定接下去计算的是 P i P i + 1 与 Q j − 1 Q j P_iP_{i+1} 与 Q_{j-1}Q_j PiPi+1与 Qj−1Q