临界切线
2013-09-24 17:38
232 查看
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
相关文章推荐
- Collections的使用
- 缓存简介(转载)
- 关于SQLite的移动开发必读
- C#的匿名委托 和 Java的匿名局部内部类
- 凸多边形交
- api更新
- ASP.NET Cookie 概述
- Flash player 11.2鼠标右键、中键 事件范例
- 错误 2 (net::ERR_FAILED): 未知错误
- FileInputStream/FileOutputStream的应用
- Bigcommerce: 添加预定功能
- 找公切线
- 计算机广告学视频
- git设置颜色
- Python学习之路一 开发环境的配置
- html页面导入文件 使用include后多出一空白行的解决
- AIDE 2.1.0 破解UI设计器和key的补丁
- 第一部分 android display(sufaceflinger & overlay)
- 四边形剖分
- 合并凸包