計算幾何基本模板

2021-08-27 18:15:20 字數 1530 閱讀 3980

const double eps = 1e-8;

const double pi = acos(-1.0);

//判浮點數符號

int sgn( double x )

//point定義

struct point

point( double _x , double _y )

point operator -( const point&b )const

point operator +( const point&b )const

//叉積

//叉積》0,a在b的順時針方向

//叉積<0,a在b的逆時針方向

//叉積=0,a與b平行

double operator ^( const point&b )const

//點積

double operator *( const point&b )const

//繞原點旋轉角度b(弧度制)後x,y的變化

void transxy( double b )

};//line定義

struct line

line( point _s , point _e )

//求兩直線交點

//第乙個值為0表示直線重合,為1表示直線平行,為2表示直線相交

pairoperator &( const line&b )const

double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));

res.x += (e.x-s.x)*t;

res.y += (e.y-s.y)*t;

return make_pair( 2 , res );

}};//兩點間距離

double dist( point a , point b )

//判斷線段相交

bool inter( line l1 , line l2 )

//判斷直線l1和線段l2相交

//小心直線是單點的情況

bool seg_inter_line( line l1 , line l2 )

//點到直線距離,返回點到直線的最近點

point pointtoline( point p , line l )

//點到線段距離。返回點到線段的最近點

point nearestpointtolineseg( point p , line l )

else

else if ( onseg(side.e,ray) )

else if ( inter(ray,side) ) cnt++;

}if ( cnt%2==1 ) return 1;

else return -1;

}//判斷凸多邊形

//允許共線邊

//點可以是順時針給出也可以是逆時針給出

//點的編號0~n-1

bool isconvex( point poly , int n )

return true;

}

計算幾何基本模板

上傳一下計算幾何的基本模板,自己也可以看 include include include using namespace std struct point typedef point vector point point double x,double y 向量與向量的 點積 叉積 vector o...

計算幾何基本模板

待更新。include include includeusing namespace std const double pi acos 1 const double eps 1e 8 實數精度 點結構型別 struct point 線段結構型別 struct lineseg struct line ...

計算幾何模板

sgn返回x經過eps處理的符號,負數返回 1,正數返回1,x的絕對值如果足夠小,就返回0。const double eps 1e 8 int sgn double x double mysqrt double x pt是point的縮寫 int版 struct pt pt int x,int y ...