POJ 3348 Cows 凸包 求面積

2022-05-20 10:44:02 字數 1757 閱讀 6696

link

題意:給出點集,求凸包的面積

思路:主要是求面積的考察,固定乙個點順序列舉兩個點叉積求三角形面積和除2即可

/** @date    : 2017-07-19 16:07:11

* @filename: poj 3348 凸包面積 叉積.cpp

* @platform: windows

* @author : lweleth ([email protected])

* @link :

* @version : $id$

*/#include #include #include #include #include #include #include #include #include #include #include #include //#include #define ll long long

#define pii pair#define mp(x, y) make_pair((x),(y))

#define fi first

#define se second

#define pb(x) push_back((x))

#define mmg(x) memset((x), -1,sizeof(x))

#define mmf(x) memset((x),0,sizeof(x))

#define mmi(x) memset((x), inf, sizeof(x))

using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 1e5+20;

const double eps = 1e-8;

struct point

point(double _x, double _y)

point operator -(const point &b) const

double operator *(const point &b) const

double operator ^(const point &b) const };

double xmult(point p1, point p2, point p0)

double distc(point a, point b)

int sign(double x)

int cmpc(point a, point b)//水平序排序

point stk[10100];

int graham(point *p, int n)//水平序

int tmp = top;

for(int i = n - 2; i >= 0; i--)

if(n > 1)

top--;

return top;

}double area(point *p, int n)

point p[10100];

double x, y;

int n;

int main()

int m = graham(p, n);

/*for(int i = 0; i < m; i++)

printf("%lf %lf\n", stk[i].x, stk[i].y);*/

double ans = area(stk, m);

printf("%d\n", (int)(ans / 50));

} return 0;

}

POJ3348 Cows 求凸包面積

題意 求給定的n個座標形成的凸包面積 套公式即可。從而引入凸包 思路 本題利用叉乘求面積 選取凸包上的乙個點作為基點,然後把多邊形分成許多的三角形,然後用叉積去算三角形面積即可 求解凸包用到的是andrew演算法,graham演算法的變種,速度更快穩定性也更好。兩種演算法的複雜度均為o nlogn ...

poj 3348 Cows 求凸包面積

給出n個點,求得到凸包的面積 多邊形面積顯然很好求,就是鄰邊叉積之和 2。問題在於怎麼求凸包上有哪些點。凸包顯然每個點都要在前兩個點連線的左邊 也就是逆時針位置 所以 1 先確定乙個最近的點當原點 最近 x最小的情況下y最小 2 以該點為原點將其餘點按極角排序 極角排序 約等同於將其他點按逆時針排列...

POJ 3348 Cows 凸包面積

題意 求凸包面積 50,取整 include include include include include include include using namespace std double eps 1e 12 struct cpoint double x mult cpoint a,cpoin...