出处:http://blog.csdn.net/acmaker/article/details/3561127
临界切线
两个凸多边形间的临界切线(一般被叫做CS线)是使得两个多边形分居线不同侧的切线。 换句话说, 他们分隔了多边形。CS线可以应用于motion planning, visibility 和 range fitting。
下图是关于两个多边形和他们的两条临界切线。
这里要注意的一点是假设数据是以标准形式给出的, CS线只会在两个顶点处与两个多边形相交。 因此, 一条CS线由多边形间顶点对确定。
如下的结论描述了这个点对:
给定两个凸多边形 P, Q, 两个顶点 p(i), q(j) (分别属于 P 和 Q) 确定一条CS线当且仅当:
- p(i), q(j) 构成多边形间对踵点对。
- p(i-1),p(i+1) 位于线 (p(i), q(j)) 一侧,同时q(j-1),q(j+1) 位于另一次。
- 计算 P 上 y 坐标值最小的顶点(称为 yminP ) 和 Q 上 y 坐标值最大的顶点(称为 ymaxQ)。
- 为多边形在 yminP 和 ymaxQ 处构造两条切线 LP 和 LQ 使得他们对应的多边形位于他们的右侧。 此时LP 和 LQ 拥有不同的方向, 并且 yminP 和 ymaxQ 成为了多边形间的一个对踵点对。
- 令 p(i)= yminP, q(j)= ymaxQ。 (p(i), q(j)) 构成了多边形间的一个对踵点对。 检测是否有 p(i-1),p(i+1) 在线 (p(i), q(j)) 的一侧, 并且 q(j-1),q(j+1) 在另一侧。 如果成立, (p(i), q(j)) 确定了一条CS线。
- 旋转这两条线, 直到其中一条和其对应的多边形的边重合。
- 一个新的对踵点对确定了。 如果两条线都与边重合, 总共三对对踵点对(原先的顶点和新的顶点的组合)需要考虑。 对于所有的对踵点对, 执行上面的测试。
- 重复执行步骤4和步骤5, 直到新的点对为(yminP,ymaxQ)。
- 输出CS线。
这个算法基本通过绕着多边形旋转切线, 顺序查找所有多边形间的对踵点对。 每次一对对踵点确定后, 执行所有必要的测试。 在上述过程执行完后, 所有的临界切线都被找到了。
算法的运行时间由步骤1和步骤6决定, 他们都花费 O(n) 的时间(所有的检测都花费常数时间。 因为有 O(n)的对踵点对, 总的花费为 O(n))。
关于凸多边形的学习, 最后的操作是凸多边形矢量和。