计算几何教程课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算几何教程课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 几何 教程 课件
- 资源描述:
-
1、计算几何教程Computational Geometry计算几何的恶心之处代码长,难写。需要讨论各种边界情况。后面所介绍的算法,有些对于边界情况的处理很完美,不需要再做讨论;有些则不然,需要自行处理边界情况。精度误差二维矢量2-Dimension Vector矢量既有大小又有方向的量。又称为向量。大家初中都毕业了我就不多说了。矢量的表示点积夹角矢量的垂直矢量的缩放矢量的投影矢量的对称二维叉积有向面积有向面积的符号点积和二维叉积的方向性利用点积可以判断矢量的前后。利用二维叉积可以判断矢量的左右。二维矢量的旋转二维矢量的极角二维计算几何2-Dimension Computational Geome
2、try约定直线点到直线的距离分点三角形的面积两直线交点两线段交点求出直线的交点,然后其判断是否在两条线段上即可。若判断两线段是否相交,则要注意平行不一定不相交,两条线段可能有重合部分或重合点。三角形的重心多边形多边形是平面上由有限线段(大于 2)组成,且首尾连接起来划出的封闭图形。教程后面的多边形一般指简单多边形,即边不相交的多边形。多边形的记录一般以顺次记录其顶点的方式完成,即顺次记录组成多边形的线段。方向一般为逆时针。判断点在多边形内外以要判断的点为起点任作一射线,计算该射线与多边形的交点数目。若有偶数个交点则在形外,否则在形内。若与线段在端点处相交或重合,则要进行复杂的判断。此时可另取一
3、射线。求多边形的面积基本的思路是进行三角剖分。求多边形的面积如果用普通面积的累加来计算的话,三角剖分就变得十分复杂。但是使用有向面积的话,这个过程就变得简单自然通用。算法算法演示算法演示算法演示算法演示算法演示算法演示算法演示算法演示算法演示三角剖分三角剖分即将多边形分为若干三角形部分,其中既有“正部分”亦有“负部分”。利用这种方法可以解决很多问题。例题:求多边形的重心名前通,给定一个简单多边形,求其重心之所在。预备知识:求质点组的重心解答利用三角剖分,计算各个三角形的面积和重心,将此三角形化为一个质量为其面积,坐标为其重心的质点。若此三角形属于“负部分”,则其拥有“负质量”。最后计算质点组的
4、重心即可。凸集凸集举例空集直线、射线、线段凸多边形圆及内部、二次曲线及内部若干种原料,每种原料含 A 成分和 B 成分的比例不同;混合这些原料能得到的产品的 A, B 两种成分的比例凸包对于点集 S,包含 S 中所有点的最小的凸集称为 S 的凸包。若 S 是有限集,则其凸包是凸多边形。直观来看,把 S 中所有点钉在一个木板上,用一个橡皮筋框起所有点来,一撒手,橡皮筋就表示出了 S 的凸包。凸包水平序 Graham 扫描算法Graham 扫描算法有水平序和极角序两种。极角序算法能一次确定整个凸包,但是计算极角需要用到三角函数,速度较慢,精度较差,特殊情况较多。水平序算法需要扫描两次,但排序简单,
5、讨论简单,不易出错。算法流程算法演示首先将所有点排序。算法演示将 1 和 2 压入栈。算法演示2 被弹出栈,3 进栈。算法演示没有点被弹出栈,4 进栈。算法演示4 被弹出栈,5 进栈。算法演示5 被弹出栈,6 进栈。算法演示6 被弹出栈,7 进栈。算法演示如此直到下凸壳被找到。算法演示倒序进行扫描找到上凸壳。Graham 扫描的时间复杂度这太傻缺了。算法的瓶颈在排序,所以时间复杂度是 O(N log N)。若坐标均为整数,可以用基数排序将复杂度优化到 O(N)。旋转卡壳算法如何计算 N 个点中,距离最大的两个点的距离?要求 O(N log N) 的算法。容易证明距离最大的两个点一定是凸包上的两
6、个点,很明显是先求凸包然后做文章啦。对踵点若凸包上的两个顶点能落在一对平行切线上,则称它们为对踵点。容易证明,答案一定是一对对踵点之间的距离。对踵点的枚举从一对对踵点逆时针枚举下一对对踵点的话,只需要观察下图中 角和 角的大小,选择其中较小的一个转过去就行了。算法最左侧点和最右侧点一定是对踵点。从此点对开始枚举即可。注意不只有“点 点”的情况,还有“点 边”和“边 边”的情况。这些情况下要枚举所有的点对。虽然看上去很简单,但是写起来还是要颇费一番周折的。旋转卡壳练习题POJ 2178 求点集中最远点POJ 3608 求两凸包间的最近点POJ 2079 求以点集中的点为顶点组成的三角形的最大面积
7、,要求 O(N2) 算法。半平面半平面的表示半平面的交半平面是凸集,所以半平面的交也是凸集。有限个半平面的交可能是空集、点、直线、射线、线段、凸多边形、有“开口”的形状甚至一个半平面。朴素的每次 O(N) 算法为了保证结果是凸多边形或其退化,首先建立一个非常大的边框。你懂的。每次顺次枚举多边形的边,与半平面求交,并将交的部分加入新多边形。在得到半平面边界与凸多边形所交形成的边时,立即将其加入新多边形。算法演示值得注意的边界情况 1值得注意的边界情况 2值得注意的边界情况 3合计 O(NlogN) 的算法这是朱泽园在其国家集训队论文半平面交的新算法及其实用价值中提出的算法。由于建立了非常大的边框
8、,半平面交的结果一定是一个凸多边形。而凸多边形分为下凸壳和上凸壳。如果分开处理这两部分,就会获得非常好的性质。下凸壳与上凸壳分别排序按照极角,筛选出可能属于下凸壳和上凸壳的半平面分别按极角大小从小到大排序。上凸壳排序时,极角位于第三象限的半平面要加上 2.扫清障碍对于极角相同的半平面,选择最靠左的一个,并将剩下的舍弃。这样即保证所有的半平面的极角皆不相同。处理下凸壳算法演示首先将前两个半平面进栈。算法演示x0 x1,将新的半平面压入栈。算法演示x0 x1,将栈顶弹出。算法演示x0 x1,将新的半平面压入栈。依此类推。处理上凸壳上下凸壳的合并只要凸壳中有不止一个半平面,就有可能出现没有用的半平面
9、。如图,下图中的 p1 半平面没有用。滤除没有用的半平面先滤除左侧的半平面。指针 p1 指向下凸壳的最左侧,p2 指向上凸壳的最左侧。若下凸壳中还有至少两个半平面,检查 p2 与 p1 的边界的交,以及下凸壳中 p1 右侧的半平面与 p1 的边界的交。若这两个交的并集为空或只有一个端点,则舍弃半平面 p1,将指针 p1 右移。处理完 p1 后类似处理 p2。若 p2 右移了,就重复处理 p1,依此类推,直到二者都不右移了为止。类似滤除右侧没有用的半平面。实际上“这两个交的并集为空或只有一个端点”仍然只是讨论交点的坐标大小。但是,这两个交点的 x 坐标可能相同,但 y 坐标不相同。所以不能像前面
展开阅读全文