POJ 3675 三角剖分

2021-07-10 13:40:03 字數 2686 閱讀 7085

#include #include #include #include #include using namespace std;

struct point

};typedef point vector;

typedef vectorpolygon;

point read_point()

vector operator +(vector a, vector b)//

vector operator -(point a, point b)//

vector operator *(vector a, double p)//

vector operator /(vector a, double p)//

bool operator <(const point &a, const point &b)//

const double eps = 1e-10;

int dcmp(double x)//

bool operator ==(const point &a, const point &b)//

double dot(vector a, vector b)//

double length(vector a)//

double cross(vector a, vector b)//

double angle(vector a, vector b)//

double area2(point a, point b, point c) //

double triarea(point a, point b, point c) //

double distance(point a, point b)

double distance2(point a, point b)

vector normal(vector a)//

vector rotate(vector a, double rad) //

point getlineintersection(point p, vector v, point q, vector w) //

double distancetoline(point p, point a, point b) //

double distancetosegment(point p, point a, point b) //

point getlineprojection(point p, point a, point b) //

bool onsegment(point p, point a1, point a2) //

double polygonarea(point *p, int n) //

vectorconvexhull(vector& p)

int k = m;

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

if (n > 1) m--;

ch.resize(m);

return ch;

}struct line

; line(point p, vector v): p(p), v(v)

bool operator < (const line& l) const

point point(double t) };

struct circle

point point(double a) };

int getlinecircleintersection(line l, circle c, double& t1, double& t2, vector& sol)

// 相交

t1 = (-f - sqrt(delta)) / (2 * e); sol.push_back(l.point(t1));

t2 = (-f + sqrt(delta)) / (2 * e); sol.push_back(l.point(t2));

return 2;

}double common_area(circle c, point a, point b)

else

return sg * c.r * c.r * angle / 2;

} else

point inter_point;

double t1, t2;

line l = line(a, b - a);

vectorinter;

getlinecircleintersection(l, c, t1, t2, inter);

if (onsegment(inter[0], a, b))

inter_point = inter[0];

else

inter_point = inter[1];

double s = fabs(cross(inter_point, a) / 2);

s += c.r * c.r * angle(inter_point, b) / 2;

return s * sg; }}

const int maxn = 55;

double r;

int n;

point p[maxn];

int main(int argc, char const *argv)

return 0;

}

這其實不能算三角剖分,只是把多邊形分解稱為三角形,求有向面積就可以了。最後不要忘記取正值。另外模板要好好儲存。

三角剖分詳解

三角剖分定義 定義 三角剖分 假設v是二維實數域上的有限點集,邊e是由點集中的點作為端點構成的封閉線段,e為e的集合。那麼該點集v的乙個三角剖分t v,e 是乙個平面圖g,該平面圖滿足條件 1.除了端點,平面圖中的邊不包含點集中的任何點。2.沒有相交邊。3.平面圖中所有的面都是三角面,且所有三角面的...

優美三角剖分

優美三角剖分 pas c cpp 題目描述 小x同學為了搞好和小c同學的關係,特意尋找了一些優美的影象作為禮物。這是一些由無窮無盡三角形組成的極為優美的圖形,小x同學很想實現這些極富美感的圖形,但是作為一名初賽都未過的偽退役選手,他水平有限,於是這個艱鉅的任務就落在你們身上了。由於好心的出題人,資料...

三角剖分詳解

三角剖分定義 定義 三角剖分 假設v是二維實數域上的有限點集,邊e是由點集中的點作為端點構成的封閉線段,e為e的集合。那麼該點集v的乙個三角剖分t v,e 是乙個平面圖g,該平面圖滿足條件 1.除了端點,平面圖中的邊不包含點集中的任何點。2.沒有相交邊。3.平面圖中所有的面都是三角面,且所有三角面的...