旋转卡壳总结.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
旋转卡壳总结

旋转卡壳总结 一些历史: 1978年, M.I. Shamos’s Ph.D. 的论文”Computational Geometry”标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。 后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O 时间的算法来确定一个凸 n 角形的对踵点对。 因为他们最多只有n/对, 直径可以在 O 时间内算出。 如同Toussaint后来提出的, Shamos的算法就像绕着多边形旋转一对卡壳。 因此就有了术语“旋转卡壳”。 1983年, Toussaint发表了一篇论文, 其中用同样的技术来解决许多问题。 从此, 基于此模型的新算法就确立了, 解决了许多问题。 他们包括: ? 计算距离 o 凸多边形直径 o 凸多边形宽 o 凸多边形间最大距离 o 凸多边形间最小距离 ? 外接矩形 o 最小面积外接矩形 o 最小周长外接矩形 ? 三角剖分 o 洋葱三角剖分 o 螺旋三角剖分 o 四边形剖分 ? 凸多边形属性 o 合并凸包 o 找共切线 o 凸多边形交 o 临界切线 o 凸多边形矢量和 ? 最薄截面 o 最薄横截带 二、计算距离 1.凸多边形直径 我们将一个多边形上任意两点间的距离的最大值定义为多边形的直径。 确定这个直径的点对数可能多于一对。 事实上, 对于拥有 n 个顶点的多边形, 就可能有 n 对“直径点对”存在。 一个多边形直径的简单例子如左图所示。 直径点 对在图中显示为被平行线穿过的黑点 . 直径用浅蓝色高亮显示。 显然, 确定一个凸多边形 P 直径的点对不可能在多边形 P 内部。 故搜索应该在边界上进行。 事实上, 由于直径是由多边形的平行切线的最远距离决定的, 所以我们只需要查询对踵点。 Shamos 提供了一个 O 时间复杂度计算n点凸包对踵点对的算法。直径通过遍历顶点列表, 得到最大距离即可。 如下是1985年发表于 Preparata 和 Shamos 文章中的 Shamos 算法的伪代码。 输入是一个多边形 P={p1,...,pn}. begin p0:=pn; q:=NEXT[p]; while Area) do q:=NEXT[q]; q0:=q; while do begin p:=NEXT[p]; Print; while Area do begin q:=NEXT[q]; if != ) then Print else return end; if = Area) then if != ) then Print else Print end end. 此处 Print 表示将 作为一个对踵点对输出, Area 表示三角形 pqr 的有向面积。 虽然直观上看这个过程与常规旋转卡壳算法不同, 但他们在本质上是相同的, 并且避免了所有角度的计算。 如下是一个更直观的算法: 1. 计算多边形 y 方向上的端点。 我们称之为 ymin 和 ymax 。 2. 通过 ymin 和 ymax 构造两条水平切线。 由于他们已经是一对对踵点, 计算他们之 间的距离并维护为一个当前最大值。 3. 同时旋转两条线直到其中一条与多边形的一条边重合。 4. 一个新的对踵点对此时产生。 计算新的距离, 并和当前最大值比较, 大于当前最 大值则更新。 5. 重复步骤3和步骤4的过程直到再次产生对踵点对 。 6. 输出确定最大直径的对踵点对。 至此, 上述的过程显得十分有用, 我们可以从对踵点对中得到其他的信息, 如多边形的宽度 。 2. 凸多边形的宽度 凸多边形的宽度定义为平行切线间的最小距离。 这个定义从宽度这个词中已经略有体现。 虽然凸多边形的切线有不同的方向, 并且每个方向上的宽度是不同的。 但幸运的是, 不是每个方向上都必须被检测。 我们假设存在一个线段 [a,b], 以及两条通过 a 和 b 的平行线。 通过绕着这两个点旋转这两条线, 使他们之间的距离递增或递减。 特别的, 总存在一个 特定旋转方向 使得两条线之间的距离通过旋转变小。 这个简单的结论

文档评论(0)

jiqingyong14 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档