#define SIZE 2100
struct point_t{
llt x,y;
}P[SIZE];
//叉积,OA×OB
inline llt cross(point_t const&O,point_t const&A,point_t const&B){
llt xoa = A.x - O.x;
llt yoa = A.y - O.y;
llt xob = B.x - O.x;
llt yob = B.y - O.y;
return xoa * yob - xob * yoa;
}
//A如果比B更靠下更靠左返回真
inline bool isLowLeft(point_t const&A,point_t const&B){
return A.y < B.y || ( A.y == B.y && A.x < B.x );
}
//按照对于pO的极角排序,极角相等的距离远的排在前面,因为后面要做一个unique
point_t* pO;
bool comp4Graham(point_t const&A,point_t const&B){
llt t = cross(*pO,A,B);
if ( t ) return t > 0LL;
llt a1 = A.x > pO->x ? A.x - pO->x : pO->x - A.x;
llt a2 = B.x > pO->x ? B.x - pO->x : pO->x - B.x;
if ( a1 != a2 ) return a1 > a2;
a1 = A.y > pO->y ? A.y - pO->y : pO->y - A.y;
a2 = B.y > pO->y ? B.y - pO->y : pO->y - B.y;
return a1 > a2;
}
计算几何 求n个点中最大四边形
最新推荐文章于 2023-03-08 16:17:29 发布