二维下计算几何程序头 (模板)

mac2022-06-30  82

#include < iostream > #include < cmath > using namespace std; const double epoints = 1e - 9 ; int sgn( double a) { return (a > epoints) - (a < - epoints);} const double pointi = acos( - 1.0 ); struct point{ double x, y; point( double xx = 0 , double yy = 0 ){ x = xx; y = yy; } bool operator == ( const point & a) const { return sgn(x - a.x) == 0 && sgn(y - a.y) == 0 ; } bool operator != ( const point & a) const { return sgn(x - a.x) != 0 || sgn(y - a.y) != 0 ; } bool operator < ( const point & a) const { return sgn(y - a.y) < 0 || sgn(y - a.y) == 0 && sgn(x - a.x) < 0 ; } point operator + ( const point & a) const { return point(x + a.x, y + a.y); } point operator - ( const point & a) const { return point(x - a.x, y - a.y); } point operator ^ ( const double & a) const { return point(x * a, y * a); } double operator ^ ( const point & a) const { // 点积 return x * a.x + y * a.y; } double operator * ( const point & a) const { // 叉积 return x * a.y - y * a.x; } point trunlen( double a) const { a /= sqrt(x * x + y * y); return point(x * a, y * a); } point turn_left() const { return point( - y, x); } point turn_right() const { return point(y, - x); } double cross( const point & a, const point & b) const { // 以this为起点两向量叉积 return (a.x - x) * (b.y - y) - (a.y - y) * (b.x - x); } double dot( const point & a, const point & b) const { // 以this为起点两向量点积 return (a.x - x) * (b.x - x) + (a.y - y) * (b.y - y); } double len2(){ return x * x + y * y; } double len() { return sqrt (len2()); } void input() { scanf( " %lf %lf " , & x, & y); } void output() const { printf( " %lf %lf\n " , x, y); }}; int main(){ return 0 ;}

 

 

参考ACM武汉大学wiki之算法介绍

转载于:https://www.cnblogs.com/DreamUp/archive/2010/08/28/1811164.html

最新回复(0)