题解 UVA11186 【正多边形 Circum Triangle】

ChthollyTree

2019-03-05 19:26:26

Solution

计算几何的一道基础题吧 我们假设圆心在(0,0),半径为r 那么 圆心角为p 的点在 $(cos(p) * r,sin(p)*r)$ 然后我们可以暴力枚举三个点,用叉积算三角形面积 code ``` #include<bits/stdc++.h> using namespace std; #define db double #define MAXN 10005 #define esp 1e-9 #define xl dian const db pi = acos(-1); struct dian { db x,y; } a[MAXN]; int n,m; db r; xl operator -(xl a,xl b) { return (xl){a.x - b.x,a.y - b.y}; } inline db chaji(xl a,xl b) { return a.x * b.y - a.y*b.x; } inline db mianji(dian a,dian b,dian c) { return fabs(chaji(b-a,c-a)); } int main() { while(1) { cin >> n >> r; if(n == 0 && abs(r) <= esp) { return 0; } for(int i = 1; i <= n; i ++) { db p; scanf("%lf",&p); p = p/180*pi; a[i].x = cos(p)*r; a[i].y = sin(p)*r; } db ans = 0; for(int i = 1; i <= n; i ++) for(int j = i+1; j <= n; j ++) for(int k = j+1; k <= n; k ++) ans += mianji(a[i],a[j],a[k]); printf("%.0lf\n",ans/2); } return 0; } ```