当前位置:网站首页>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
边栏推荐
- The normal form of the database (first normal form, second normal form, third normal form, BCNF normal form) "recommended collection"
- Browser's built-in color picker
- The new BMW 3 Series is on the market, with safety and comfort
- TextBlock控件入门基础工具使用用法,取上法入门
- 更新数据表update
- 复制延迟案例(1)-最终一致性
- 【MySQL】Mysql范式及外键作用
- Deployment application life cycle and Pod health check
- MySQL database operations
- tooltips使用教程(鼠标悬停时显示提示)
猜你喜欢
随机推荐
How useful is four-quadrant time management?
Single-cell sequencing workflow (single-cell RNA sequencing)
TRACE32 - Common Operations
7、常见面试口语提问问题汇总
【7.29】代码源 - 【排列】【石子游戏 II】【Cow and Snacks】【最小生成数】【数列】
腾讯云部署----DevOps
Getting Started with TextBlock Control Basic Tools Usage, Get Started
Public Key Retrieval is not allowed error solution when DBeaver connects to MySQL 8.x
基于Redis(SETNX)实现分布式锁,案例:解决高并发下的订单超卖,秒杀
ASP.NET Core 产生连续 Guid
复制延迟案例(3)-单调读
gerrit中如何切换远程服务器
2.索引及调优篇【mysql高级】
MySQL基础篇【单行函数】
Visualize GraphQL schemas with GraphiQL
The 2nd China PWA Developer Day
form 表单提交后,使页面不跳转[通俗易懂]
json到底是什么(c# json)
【7.28】代码源 - 【Fence Painting】【合适数对(数据加强版)】
修改SQL语言实现Mysql 多表关联查询优化









