叉积
图中两个向量p1,p2.两个向量a和b的叉积写作a×b(有时也被写成a∧b,避免和字母x混淆)
向量p1,p2的叉积为
我们把(0,0)点当做p0.
有了叉积的基础,我们在判断两条线段的关系p0p1,p1p2,就可以直接添一条有向线段p0p2,再检查p0p1,p1p2和p0p2的时钟旋转关系。为了做到这一点,我们计算出叉积
给出向量的一些模板运算
struct point{
double x,y;
point(){};
point(double x,double y) :x(x),y(y){};
// point(double x=0,double y=0): x(x),y(y){}
point operator - (const point &op2) const{
return point(x-op2.x,y-op2.y);
}
double operator ^ (const point &op2)const{ //叉积
return x*op2.y - y*op2.x;
}
}p[maxn];
inline int sign(const double &x){ //判断符号
if(x>epsi) return 1;
if(x < -epsi) return -1;
return 0;
}
inline double sqr(const double &x){
return x*x;
}
inline double mul(const point &p0,const point &p1,const point &p2){ //求 p0p1与p0p2的叉积
return (p1-p0) ^ (p2-p0);
}
inline double dis2(const point &p0,const point &p1){// |p0p1|的平方
return sqr(p0.x-p1.x)+sqr(p0.y-p1.y);
}
inline double dis(const point &p0,const point &p1){// |p0p1|
return sqrt(dis2(p0,p1));
}
叉积的应用:
//补