hxy的未完成的计算几何模板

  1 #include <iostream>

  2 #include <cstring>

  3 #include <cstdio>

  4 #include <cmath>

  5 using namespace std;

  6 

  7 const double PI = acos(-1);

  8 const double eps = 1e-8;

  9 

 10 int sgn( double x )

 11 {

 12     if ( fabs(x) < eps ) return 0;

 13     return x > 0 ? x : -x;

 14 }

 15 

 16 struct Point

 17 {

 18     double x, y;

 19 

 20     Point(){}

 21 

 22     Point( double _x, double _y )

 23     {

 24         x = _x, y = _y;

 25     }

 26 

 27     Point operator + ( const Point & o ) const

 28     {

 29         return Point( x + o.x, y + o.y );

 30     }

 31 

 32     Point operator - ( const Point & o ) const

 33     {

 34         return Point( x - o.x, y - o.y );

 35     }

 36 

 37     Point operator * ( double p )

 38     {

 39         return Point( x * p, y * p );

 40     }

 41 

 42     Point operator / ( double p )

 43     {

 44         return Point( x / p, y / p );

 45     }

 46 

 47     bool operator == ( const Point & o ) const

 48     {

 49         return sgn( x - o.x ) == 0 && sgn( y - o.y ) == 0;

 50     }

 51 

 52 };

 53 

 54 typedef Point Vector;

 55 

 56 double dot( Vector a, Vector b )

 57 {

 58     return a.x * b.x + a.y * b.y;

 59 }

 60 

 61 double length( Vector a )

 62 {

 63     return sqrt( dot( a, a ) );

 64 }

 65 

 66 double angle( Vector a, Vector b )

 67 {

 68     return acos( dot( a, b ) / length(a) / length(b) );

 69 }

 70 

 71 double cross( Vector a, Vector b )

 72 {

 73     return a.x * b.y - a.y * b.x;

 74 }

 75 

 76 double darea2( Point a, Point b, Point c )

 77 {

 78     return cross( b - a, c - a );

 79 }

 80 

 81 double area( Point a, Point b, Point c )

 82 {

 83     return fabs( cross( b - a, c - a ) * 0.5 );

 84 }

 85 

 86 Vector rotate( Vector a, double rad )

 87 {

 88     return Vector( a.x * cos(rad) - a.y * sin(rad),

 89                    a.x * sin(rad) + a.y * cos(rad) );

 90 }

 91 

 92 double polygonArea( Point * p, int n )

 93 {

 94     double area = 0;

 95     for ( int i = 1; i < n - 1; i++ )

 96     {

 97         area += cross( p[i] - p[0], p[i + 1] - p[0] );

 98     }

 99     return fabs( area * 0.5 );

100 }

101 

102 struct Circle

103 {

104     Point c;

105     double r;

106 };

107 

108 double angle( Vector v )

109 {

110     return atan2( v.y, v.x );

111 }

112 

113 int main ()

114 {

115 

116 

117     return 0;

118 }

 

你可能感兴趣的:(模板)