(3条消息)graham法求凸包详解_网络_路人黑的纸巾-CSDN博客 https://blog.csdn.net/enjoy_pascal/article/details/78397028
(3条消息)Graham-Scan算法计算凸包的Python代码实现_Python_仰起脸笑得像满月-CSDN博客 https://blog.csdn.net/john_bian/article/details/85221039
步骤:
- 找出所有点中y坐标最小的点(即最靠下的点)作为起始点
- 将其他点分别与起始点连接,按照逆时针方向分别给除起始点以外的每个点按照1,2,3…标号,如下图:
- 流程
- 将最低点p0和排序好的点中的第一个点p1压入栈中,然后从p2开始计算,计算栈顶两个点与该点三点向量是否是逆时针转动,若是,则将该点压入栈中,否则将栈顶元素推出。(此处对栈的概念不清楚可自行搜索)
- 最后栈里面元素就是所有的凸包外围的点
判断是否为逆时针旋转:
代码如下:
import matplotlib.pyplot as plt
import math
import sklearn.datasets as datasets
import json
"""
使用Graham扫描法计算凸包
算法参见《算法导论》第三版 第605页
"""
def get_bottom