#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.平面圖中所有的面都是三角面,且所有三角面的...