計算幾何模板四(多邊形)
#include#include#include#include#include#includeusing namespace std;
#define sgn(x) (((x)<0)?(-1):(1))
#define eps 1e-8
#define inf 1e10
#define pi (acos(-1.0))
double deg2rad(double deg)
double rad2deg(double rad)
double sin(double deg)
double cos(double deg)
double arcsin(double val)
double arccos(double val)
//點struct point
point(double _x,double _y):x(_x),y(_y){};
};//兩個點的距離
double distance(const point &a,const point &b)
//線段
struct seg
; seg(point _a,point _b):a(_a),b(_b){};
};//有公共端點o叉乘,並判拐,若正p0->p1->p2拐向左
double cross(const point &a,const point &b,const point &o)
//判等(值,點,直線)
bool isequal(double a,double b)
//多邊形,逆時針或順時針給出x,y
struct poly
; poly(int _n,const double *_x,const double *_y)
};//多邊形頂點
point vertex(const poly &poly,int idx)
//多邊形的邊
seg edge(const poly &poly,int idx)
//多邊形的周長
double perimeter(const poly &poly)
}return (cnt%2!=0);
}//判斷是否為簡單多邊形
bool is******(const poly& poly)
++top;
x[top]=points[i].x;
y[top]=points[i].y;
}delete points;
poly poly(++top,x,y);
delete x;
delete y;
return poly;
}
模板 計算幾何 多邊形
1 注意 運算子的優先順序是很低的。2 注意重合點和共線點的情況 const double eps 1e 9 const double pi acos 1.0 int sgn double x struct point point double x,double y x x y y double l...
計算幾何 多邊形
判定凸多邊形 頂點凹凸性法 判斷點在凸多邊形內外 與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊形外。水平 垂直交叉點數判別法 適用於任意多邊形包括凹凸邊形 注意到如果從p作水平向左的射線的話,如果p在多邊形內部,那麼這條射線與多邊形的交點必為奇數,如果p...
計算幾何 多邊形筆記
計算下乙個前後所組成向量的階乘,如果在計算時,出現負值,則此多邊形是凹多邊形,如果所有頂點計算完 畢,其結果都大於0,則多邊形是凸多邊形。判斷點在凸多邊形內外 與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊 形外。水平 垂直交叉點數判別法 適用於任意多邊形...