当前位置:网站首页>Graham's Scan method for solving convex hull problems
Graham's Scan method for solving convex hull problems
2022-07-31 15:54:00 【Yasen Jia】
Question background
- About the convex hull
Assuming that there are 13 points p0~p12 on the plane, make a polygon through some points, so that this polygon can "enclose" all the points, when the polygon is a convex polygon,We call this the "convex hull" - Convex Hull Problem
On a two-dimensional coordinate system, each point can be represented by coordinates (x,y)
Given the number of points and the coordinates of each point, find the points that form the convex hull
Graham’s Scan method
Find a point on the convex hull first, and start from that point to find the points on the convex hull one by one in a counterclockwise direction
Steps
Put all points in the two-dimensional coordinate system, then the point with the smallest ordinate must be the point on the convex hull, as shown in the figure p0
Translate the coordinates of all points to make p0 as the origin, as shown above
Calculate the argument of each point with respect to p0 α \alpha α, sorts the points in ascending order of argument.When α \alpha α When the points are the same, the points closer to p0 are ranked first.For example, the results obtained in the above figure are p1, p2, p3, p4, p5, p6, p7, p8.It can be known from geometric knowledge that the first point p1 and the last point p8 must be points on the convex hull
Now that we know the first point p0 and the second point p1 on the convex hull, we put them on the stack in turn.
Initialize the current point to p2, and perform the following operations:
a. Determine the difference between the vector formed by the two points at the top of the stack and the vector formed by the stack vertex and the current pointWhether the relationship is counterclockwise, that is, whether the vector obtained after the cross product is counterclockwise.(Another formulation of this question is to connect two points at the top of the stack to get a straight line to see if the current point is to the left of the straight line)b. If so, the current point is the point on the convex hull, and it is pushed into the stack.And take the next point in the sorting as the current point, and continue to judge a until all points are traversed.c. If not, the top element of the stack is not a point on the convex hull, and the top element of the stack is popped.The current point remains unchanged, and the judgment of a continues until it is a counterclockwise relationship.
After the final traversal, the elements in the stack are the points that form the convex hull
Flowchart
Code Link
边栏推荐
猜你喜欢
随机推荐
【7.29】代码源 - 【排列】【石子游戏 II】【Cow and Snacks】【最小生成数】【数列】
mysql黑窗口~建库建表
i.MX6ULL驱动开发 | 33 - NXP原厂网络设备驱动浅读(LAN8720 PHY)
The principle of hough transform detection of straight lines (opencv hough straight line detection)
Replication Latency Case (3) - Monotonic Read
hough变换检测直线原理(opencv霍夫直线检测)
字符串反转的实现方法总结「建议收藏」
Implementing DDD based on ABP
Deployment应用生命周期与Pod健康检查
C程序是如何跑起来的01 —— 普通可执行文件的构成
border控件的使用
form 表单提交后,使页面不跳转[通俗易懂]
Implement anti-shake and throttling functions
贪吃蛇项目(简单)
工程水文学试卷
网站漏洞修复服务商关于越权漏洞分析
01 邂逅typescript,环境搭建
Matlab matrix basic operations (definition, operation)
LeetCode_733_图像渲染
Replication Latency Case (1) - Eventual Consistency