计算几何-凸包问题
2014-12-15 23:55
239 查看
问题
给定平面上的二维点集,求解其凸包。一、Graham扫描法
1. 在所有点中选取y坐标最小的一点H,当作基点。如果存在多个点的y坐标都为最小值,则选取x坐标最小的一点。坐标相同的点应排除。然后按照其它各点p和基点构成的向量<H,p>与x轴的夹角进行排序,夹角由大至小进行顺时针扫描,反之则进行逆时针扫描。实现中无需求得夹角,只需根据向量的内积公式求出向量的模即可。
2.前两个点(包括基点)一定在凸包上。(从第三个点)即当加入一点时,必须考虑到前面的线段是否会出现在凸包上。从基点开始,凸包上每条相临的线段的旋转方向应该一致,并与扫描的方向相反。如果发现新加的点使得新线段与上线段的旋转方向发生变化,则可判定上一点必然不在凸包上。实现时可用向量叉积进行判断,设新加入的点为pn + 1,上一点为pn,再上一点为pn - 1。顺时针扫描时,如果向量<pn - 1, pn>与<pn,
pn + 1>的叉积为正(逆时针扫描判断是否为负),则将上一点删除。删除过程需要回溯,将之前所有叉积符号相反的点都删除,然后将新点加入凸包。
3.按照上述步骤进行扫描,直到点集中所有的点都遍例完成,即得到凸包。
整个算法的复杂度为O(nlgn)。
二、Jarvis步进法
相关文章推荐
- 计算几何---凸包问题(Graham/Andrew Scan )
- 关于计算几何的几个问题之二(凸包和最近点对)
- 计算几何---凸包问题
- POJ 1584 A Round Peg in a Ground Hole(计算几何--凸包)
- SGU 253 计算几何 判定点是否在凸包内
- 【转】 计算几何中的精度问题
- [Poj 1113] 计算几何之凸包(一) {卷包裹算法}
- ZOJ-1090-The Circumference of the Circle(计算几何,海伦公式,三角形外接圆半径公式,cout输出小数的一些问题)
- NYOJ-3 多边形重心问题【计算几何】
- <转> 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论
- pku 3348 计算几何 求凸包面积
- POJ 2079(计算几何初步——凸包加旋转卡壳)
- [计算几何]凸包的旋转卡壳算法
- HDUOJ 2056 Rectangles (几何计算问题)
- HDUOJ 2056 Rectangles (几何计算问题)
- POJ 1584(计算几何初步——凸包判断,圆与多边形,点是否在多边形内)
- [计算几何-凸包]pku1113-Wall
- [计算几何]凸包算法 收藏
- [Poj 2187]计算几何之凸包(三) {旋转卡壳初步}
- POJ 1873(计算几何初步——位运算枚举,求凸包)