当前位置:网站首页>Graham‘s Scan法求解凸包问题
Graham‘s Scan法求解凸包问题
2022-07-31 15:49:00 【Yasen Jia】
问题背景
- 关于凸包
假设平面上有p0~p12共13个点,过某些点做一个多边形,使这个多边形能把所有点都“包”起来,当这个多边形为凸多边形时,我们称之为“凸包” - 凸包问题
在二维坐标系上,每个点都能用坐标(x,y)表示
给出点的数目与各点的坐标,求构成凸包的点
Graham’s Scan法
先找到凸包上的一个点,从那个点开始按逆时针方向逐个找凸包上的点
步骤
将所有点放在二维坐标系中,则纵坐标最小的点一定是凸包上的点,如图中p0
将所有点的坐标进行平移,使p0作为原点,如上图
计算各个点相对于p0的辐角 α \alpha α,按辐角从小到大的顺序对各个点进行排序。当 α \alpha α 相同时,距离p0比较近的点排在前面。例如上图得到的结果为p1、p2、p3、p4、p5、p6、p7、p8。由几何知识可以知道,第一个点p1和最后一个点p8一定是凸包上的点
现在我们知道了凸包上的第一个点p0和第二个点p1,我们把他们依次放在栈里面。
将当前点初始化为p2,并进行如下操作:
a. 判断栈顶的两个点形成的向量与栈顶点和当前点形成的向量之间是否是逆时针关系,即叉乘后得到的向量是否是逆时针方向。(这个问题的另一个表述是连接栈顶的两个点得到一条直线,看当前点是否在这个直线的左边) b.若是,则当前点为凸包上的点,将其压入栈中。并将排序中其后的点作为当前点,继续进行a的判断,直到遍历所有点。 c. 若不是,则栈顶元素不是凸包上的点,将栈顶元素弹出。当前点不变,继续进行a的判断,直到是逆时针关系。最终遍历完后,栈中的元素就是构成凸包的点
流程图

代码链接
边栏推荐
- 删除表格数据或清空表格
- ASP.NET Core generates continuous Guid
- 【7.28】代码源 - 【Fence Painting】【合适数对(数据加强版)】
- Qt practical cases (54) - using transparency QPixmap design pictures
- ansible study notes 02
- Delete the disk in good condition (recovery partition)
- Precautions and solutions when SIGABRT error is reported
- BGP综合实验(建立对等体、路由反射器、联邦、路由宣告及聚合)
- OPPO在FaaS领域的探索与思考
- 贪吃蛇项目(简单)
猜你喜欢

Internet banking stolen?This article tells you how to use online banking safely

mysql黑窗口~建库建表

基于Redis(SETNX)实现分布式锁,案例:解决高并发下的订单超卖,秒杀

Use of radiobutton

Kubernetes principle analysis and practical application manual, too complete

mongo enters error

T - sne + data visualization parts of the network parameters

tooltips使用教程(鼠标悬停时显示提示)

The 2nd China PWA Developer Day

全新宝马3系上市,安全、舒适一个不落
随机推荐
Linux查看redis版本(查看mongodb版本)
Oracle动态注册非1521端口
工程水文学名词解释总结
基于ABP实现DDD
浏览器自带的拾色器
Oracle dynamically registers non-1521 ports
OPPO在FaaS领域的探索与思考
JVM参数解析 Xmx、Xms、Xmn、NewRatio、SurvivorRatio、PermSize、PrintGC「建议收藏」
【7.28】代码源 - 【Fence Painting】【合适数对(数据加强版)】
The use of border controls
Emmet syntax
Why is the field of hacking almost filled with boys?
更新数据表update
软件实现AT命令操作过程
R language ggplot2 visualization: use the ggmapplot function of the ggpubr package to visualize the MA plot (MA-plot), the font.legend parameter and the font.main parameter to set the title and legend
Unity中实现点选RenderTexture中的3D模型
SQL、HQL、JPQL 到底有什么区别
Internet banking stolen?This article tells you how to use online banking safely
TRACE32 - SNOOPer-based variable logging
复制延迟案例(3)-单调读