当前位置:网站首页>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的判断,直到是逆时针关系。
最终遍历完后,栈中的元素就是构成凸包的点
流程图
代码链接
边栏推荐
- mongo进入报错
- type of timer
- The use of border controls
- Vb how to connect mysql_vb how to connect to the database collection "advice"
- 字符指针赋值[通俗易懂]
- json到底是什么(c# json)
- 浏览器自带的拾色器
- How useful is four-quadrant time management?
- The R language ggstatsplot package ggbarstats function visualizes bar charts, and adds hypothesis test results (including sample number, statistics, effect size and its confidence interval, significan
- Doing things software development - the importance of law and understanding of reasonable conclusions
猜你喜欢
leetcode303 Weekly Match Replay
【MySQL】Mysql范式及外键作用
mongo进入报错
Getting Started with TextBlock Control Basic Tools Usage, Get Started
国内市场上的BI软件,到底有啥区别
BGP综合实验(建立对等体、路由反射器、联邦、路由宣告及聚合)
浏览器自带的拾色器
外媒所言非虚,苹果降价或许是真的在清库存
TRACE32 - SNOOPer-based variable logging
Internet banking stolen?This article tells you how to use online banking safely
随机推荐
gerrit中如何切换远程服务器
tensorflow2.0 cnn(layerwise)
SQL、HQL、JPQL 到底有什么区别
复制延迟案例(3)-单调读
What is the difference between BI software in the domestic market?
Use of radiobutton
type of timer
Browser's built-in color picker
Efficient use of RecyclerView Section 2
字符指针赋值[通俗易懂]
Delete table data or clear table
第二届中国PWA开发者日
Gorm—Go language database framework
R language ggplot2 visualization: use the ggboxplot function of the ggpubr package to visualize the grouped box plot, use the ggpar function to change the graphical parameters (caption, add, modify th
Word table to Excel
Deployment应用生命周期与Pod健康检查
TRACE32 - C source code association
mongo enters error
"Autumn Recruitment Series" MySQL Interview Core 25 Questions (with answers)
国内市场上的BI软件,到底有啥区别