您的位置:首页 > 其它

临界切线

2013-09-24 17:38 232 查看



两个凸多边形间的临界切线(一般被叫做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) 位于另一次。
利用这个结论, CS线可以很容易地确定。 只有多边形间的对踵点对才需要进行测试。 因此, Toussaint建议使用旋转卡壳。 假设多边形是以标准形式给出并且是顺时针序排列顶点, 考虑如下过程:
计算 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))。 

关于凸多边形的学习, 最后的操作是凸多边形矢量和。

 

原文地址:http://cgm.cs.mcgill.ca/~orm/cslines.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: