uva 11177 凸多邊形和圓的相交

2021-12-30 00:01:03 字數 2170 閱讀 9675

題意:按順時針或逆時針順序給出乙個凸n邊形的n個點的座標,然後讓乙個圓心在(0,0)的圓和凸n邊形相交的面積大於等於r,問圓的最小半徑。

題解:這題簡直坑爹啊,各種細節錯誤。。修修改改了一天,最後看別人題解也還是不懂為什麼onsegment函式要寫成那樣。。。明明不能判斷點是否**段上 ╮(╯▽╰)╭

畫畫圖思路不難想到,把凸n邊形的每條邊都和圓判斷關係,如果是邊的兩點都在圓內,兩條邊對應乙個三角形的面積,如果乙個點在圓外乙個在圓內(包括邊界),那就是乙個三角形加乙個扇形,如果兩點都在圓外,分兩種情況,和圓有兩個交點的話是兩個扇形和乙個三角形,如果和圓無交點是乙個扇形。

#include

#include

#include

#include

#include

using namespace std;

const double eps = 1e-9;

const double pi = acos(-1);

int dcmp(double x)

struct point

};typedef point vector;

vector operator + (const vector& a, const vector& b)

vector operator - (const vector& a, const vector& b)

vector operator * (const vector& a, double& b)

vector operator / (const vector& a, double& b)

bool operator == (const vector& a, const vector& b)

bool operator < (const vector& a, const vector& b)

double dot(const vector& a, const vector& b)

double length(const vector& a)

double cross(const vector& a, const vector& b)

double angle(const vector& a, const vector& b)

struct line

line(point a, vector b): p(a), v(b)

bool operator < (const line& l) const

point point(double a)

};struct circle

circle(point a, double b): c(a), r(b) {}

point point(double a)

};bool ispointincircle(point p, circle c)

bool onsegment(point p, point p1, point p2)

void segmentcircleintersection(point p1, point p2, circle c, point* sol, int& num)

else

}double fanarea(circle c, vector v1, vector v2)

double getcommonarea(point p1, point p2, point p3, circle c)

segmentcircleintersection(p2, p3, c, sol, num);//注意兩個端點對應不同交點,寫反就錯了

if (num == 2)

return fanarea(c, p2 - p1, sol[0] - p1) + fabs(cross(sol[0] - p1, sol[1] - p1)) * 0.5 + fanarea(c, p3 - p1, sol[1] - p1);

return fanarea(c, p2 - p1, p3 - p1);

}const int n = 55;

point p[n];

double r;

int n;

double commonarea(circle c)

int main()

printf(case %d: %.2lf

, cas++, l);

}return 0;

}

求任意多邊形面積(凹多邊形和凸多邊形)

遇到問題 已知多邊形的各個左邊點,要求多邊形的面積 然後我搜尋了下看到這篇文章 這個人說的不多,但是簡單明瞭 首先已知各定點的座標分別為 x1,y1 x2,y2 x3,y3 xn,yn 則該多邊形的面積公式為 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 xk yk 1 xk 1 yk...

凸多邊形的劃分

給定乙個具有 n 個頂點的凸多邊形,將頂點從 1 至 n 標號,每個頂點的權值都是乙個正整數。將這個凸多邊形劃分成 n 2 個互不相交的三角形,對於每個三角形,其三個頂點的權值相乘都可得到乙個權值乘積,試求所有三角形的頂點權值乘積之和至少為多少。輸入格式 第一行包含整數 n,表示頂點數量。第二行包含...

凸多邊形的劃分

給定乙個具有 n 個頂點的凸多邊形,將頂點從 1 至 n 標號,每個頂點的權值都是乙個正整數。將這個凸多邊形劃分成 n 2 個互不相交的三角形,對於每個三角形,其三個頂點的權值相乘都可得到乙個權值乘積,試求所有三角形的頂點權值乘積之和至少為多少。輸入格式 第一行包含整數 n,表示頂點數量。第二行包含...