一些重要的定义和表示:

  表示点的结构体:

1 struct Point{
2     double x, y;
3 };

  表示线段的结构体:

1 struct Segment{
2     Point p1, p2;
3 };

  表示直线的结构体:

1 typedef Segment Line;

  表示圆的类:

1 class Circle{
2 public:
3     Point c;
4     double r;
5     Circle(Point c = Point(), double r = 0.0): c(c), r(r){}
6 };

  多边形的表示:用点的序列

1 typedef vector<Point> Polygon;

 

  重载点之间的运算:

 1 struct Point{
 2     double x, y;
 3     Point operator + (Point &p){
 4         return Point(x + p.x, y + p.y);
 5     }
 6 
 7     Point operator - (Point &p){
 8         return Point(x - p.x, y - p.y);
 9     }
10 
11     Point operator * (double k){
12         return Point(x * k, y * k);
13     }
14 };

 

  向量的范数和大小:

1 double norm(Vector a){
2     return a.x * a.x + a.y * a.y;
3 }
4 
5 double abs(Vector a){
6     return sqrt(norm(a));
7 }

 

  最终的点和向量定义:

 1 #define EPS (1e - 10)
 2 #define equals(a, b) (fabs((a) - (b)) < EPS )
 3 class Point{
 4 public:
 5     double x, y;
 6 
 7     Point(double x = 0, double y = 0): x(x), y(y){}
 8 
 9     Point operator + (Point p) {return Point(x + p.x, y + p.y);}
10     Point operator - (Point p) {return Point(x - p.x, y - p.y);}
11     Point operator * (double a) {return Point(x * a, y * a);}
12     Point operator / (double a) {return Point(x / a, y / a);}
13 
14     double abs() { return sqrt(norm()); }
15     double norm() { return x * x + y * y; }
16 
17     bool operator < (const Point &p) const {
18         return x != p.x ? x < p.x : y < p.y;
19     }
20 
21     bool operator == (const Point &p) const {
22         return fabs(x - p.x) < EPS && fabs(y - p.y) < EPS;
23     }
24 };
25 
26 typedef Point Vector;

 

一些常用计算:

  向量内积a*b:标量,表示b在a方向上投影和a模的乘积

  a*b = |a||b|cosθ = a.x * b.x + a.y * b.y

  代码如下:

1 double dot(Vector a, Vector b){
2     return a.x * b.x + a.y * b.y;
3 }

 

  向量外积axb:标量,表示和ab平面垂直的向量,满足右手定则,从a转到b,大拇指方向为内积方向

  当a,b为二维向量时

  |a x b| = a.x * b.y - a.y * b.x

  代码如下:

1 double cross(Vector a , Vector b){
2     return a.x * b.y - a.y * b.x;
3 }
posted on 2020-09-23 16:58  高数考了59  阅读(237)  评论(0)    收藏  举报