convex hull 算法之一:Graham Scan凸包算法
来源:互联网 发布:淘宝发货地址自动填写 编辑:程序博客网 时间:2024/05/17 01:55
凸包(Convex Hull)是一个计算几何(图形学)中的概念。点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内(也就是说:平面上有n个点p1,p2, ..., pn, 要求求出一个面积最小的凸多边形,使得这个多边形包含所有平面上的点。)
关于凸包求解,主要有两种算法:
- Graham scan(Graham扫描法),时间复杂度
O(nlogn)
- Gift wrapping (Jarvis march,Jarvis步进法),时间复杂度
O(nh)
最常用的是Graham scan方法,主要步骤如下:(伪代码) plaincopy
- GRAHAM-SCAN(Q)
- {
- 1. 取出所有点中y坐标最小的点作为初始点p0
- 2. 之后对于所有其他点,以p0为中心,点集中的所有点按关于p0的极角逆时针排序,形成p1,p2,..pn-1
- 3. push(p0,Stack)
- 4. push(p1,Stack)
- 5. push(P2,Stack)
- for(Point i: 3->n-1)
- {
- px = nexttoTop(Stack)
- py = Top(Stack)
- do while (如果(py->pi向量)相对于(px->py向量)是向右走的)
- pop(Stack)
- px = nextotTop(Stack)
- py = Top(Stack)
- push(pi, Stack);
- }
- return Stack; //最后Stack栈中保存了所有凸多边形的顶点集合
- }
0 0
- convex hull 算法之一:Graham Scan凸包算法
- POJ1113 Convex Hull/凸包 Graham scan算法
- Convex hull凸包问题和Graham算法
- UVa 681 Convex Hull Finding (凸包,Graham‘s Scan)
- Convex hull: Graham scan
- 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论
- 凸包(Convex Hull)问题的三种解法: 暴力,Graham Scan,分治
- 凸包-Graham Scan算法
- 凸包-Graham-Scan算法
- Graham Scan凸包算法
- Graham Scan Algorithm solve convex hull problem
- 凸包Graham Scan算法实现
- 凸包Graham Scan算法实现
- 凸包——Graham-Scan算法
- 凸包Graham Scan算法实现
- Convex hull 之 Graham_scan(凸包检测算法)
- Convex hull trick算法
- Ouellet Convex Hull凸壳算法
- iOS 键盘遮挡问题
- extjs-grid数据加载
- Block 理解 总结 使用demo 通俗易懂
- TextView使用SpannableString设置复合文本
- Python中的tile函数
- convex hull 算法之一:Graham Scan凸包算法
- 初学编程者,从一开始就值得坚持的习惯
- ViewState的用法
- Android ComponentName的用法
- 查询效率问题??
- unity3D中一些小功能的实现
- 动态适应label的高度
- 软件工程师等级
- nginx---list