-
生成随机的点
-
使用EP算法得到极点
- 初始化状态
- 3重循环遍历三角形
- 第四重循环判断点
- intriagle测试里面先要保证三角形的顶点是CCW
- to-left测试的计算公式
-
可视化所有的点
-
完整代码
import pygame import random # 定义颜色 RED = (255, 0, 0) GREEN = (0, 255, 0) BACKGROUND_COLOR = (255, 255, 255) class Point: def __init__(self, x, y): self.x = x self.y = y self.extreme = True def toLeft(p, q, s): area = p.x * q.y - p.y * q.x + \ q.x * s.y - q.y * s.x + \ s.x * p.y - s.y * p.x return area > 0 def InTriangle(p, q, r, s): # 这里需要一个函数来检测点s是否在由p, q, r形成的三角形内 # 返回True如果s在三角形内, 否则返回False # NOTE: 这个函数的具体实现需要更多的背景知识来完成,这里我暂时用一个简单的返回值代替 if not toLeft(p, q, r): p, r = r, p ret1 = toLeft(p, q, s) ret2 = toLeft(q, r, s) ret3 = toLeft(r, p, s) if ret1 and ret2 and ret3: return True return False def extremePoint(points): n = len(points) for s in range(n): points[s].extreme = True for p in range(n): for q in range(p + 1, n): for r in range(q + 1, n): for s in range(n): if s == p or s == q or s == r or not points[s].extreme: continue if InTriangle(points[p
第一个计算几何算法的可视化---极点法获取凸包
于 2023-10-30 15:48:02 首次发布