#include<iostream> using namespace std; typedef struct Point { int x, y; }P; P points[100]; int flag[100] = { 0 }; //排列算法 bool sortP(P p1, P p2) { if (p1.x == p2.x) return p1.y > p2.y; else return p1.x > p2.x; } int S(P p1, P p2, P p) { return 0.5 * ((p1.x * p2.y - p2.x * p1.y) + (p2.x * p.y - p.x * p2.y) + (p.x * p1.y - p1.x * p.y)); } P hull(P p,int mode) { int finalP[100]; if (sizeof(p) <= 2) { for (int i = 0; i < sizeof(p); i++) { flag[i] = 1; } for (int i = 0; i < sizeof(p); i++) { if (flag[i] = 1) { for (int j = 0; j < sizeof(finalP); j++) { finalP[j] = p[i]; } } } } }
时间: 2024-03-19 15:42:28 浏览: 22
这段代码是一个求凸包的算法,其中使用了结构体 Point 来存储点的坐标,使用 flag 数组来标记点是否被访问过。其中的 sortP 函数是用来进行排序的,按照 x 坐标从大到小排列,如果 x 坐标相同则按照 y 坐标从大到小排列。S 函数是用来计算三个点组成的三角形的面积的,最后的 hull 函数是用来求凸包的核心函数。当点的数量小于等于 2 个时,直接返回这些点;否则需要找到最左下角的点作为起点,然后按照顺时针方向扫描所有点,用 flag 数组来标记是否被访问过,最后将所有被访问过的点存储在 finalP 数组中,最后返回 finalP 数组。
阅读全文