1.1数学基础知识
1.点和向量的定义
/*二维点定义*/
struct point{
double x;
double y;
};
/*二维向量定义*/
struct Vector{
point s; //向量的起点
point t; //向量的终点
};
2.多边形的定义
/*多边形定义*/
struct Polygon{
int n; //多边形的顶点数目
point P[N]; //多边形顶点的集合,按照逆时针或顺时针排列,N
};
3.圆的定义
/*圆的定义*/
struct circle{
double r; //半径
point o; //圆心
};
2.2向量的基本向量
1.向量运算的实现
struct point{
double x,y;
point(){}
point(double _x,double _y):x(_x),y(_y){}
point operator + (point a){ //向量加法
return point(x+a.x,y+a.y);
}
double operator - (point a){ //向量减法
return point(x-a.x,y-a.y);
}
double operator * (point a){ //向量叉积
return x*a.y-a.x*y;
}
double operator ^ (point a){ //向量点积
return x*a.x+y*a.y;
}
point operator * (double a){ //向量乘以实数
return point(a*x,a*y);
}
double len2(){ //向量模的平方
return x*x+y*y;
}
};
2.向量点积、向量叉积
1)向量点积
公式:a * b = |a| * |b| * cosθ ( θ为a和b的夹角 )
如果a,b是用坐标表示,即a(x1,y1),b(x2,y2),则a*b=x1*x2+y1*y2。
2)向量叉积
例题1.TOYS
#include<iostream>
#include<cstring>
using namespace std;
#define N 5010
struct point{
x,y;
point(){}
point(double _x,double _y):x(_x),y(_y){}
double operator - (point a){ //向量减法
return point(x-a.x,y-a.y);
}
double operator * (point a){ //向量叉乘
return x*a.y-y*a.x;
}
};
——摘自ACM/ICPC算法基础训练教程