欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算几何 - 点积与叉积

程序员文章站 2022-04-02 09:39:55
...

几何意义:
  向量的点积(a · b )a · b = |a||b|cos{\cos\emptyset } ,若cos{\cos\emptyset } 为正,两向量之间的夹角为锐角;为负,两向量夹角为钝角;为量,两向量夹角为直角。(ba 方向上的投影)。
  向量的叉积(a × b )a · b = |a||b|sin{\sin\emptyset } ,数值上表示 ab构成的平行四边形的面积。

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int Max_n=1e5+10;
const double eps=1e-10;

struct Point{//定义一个向量的类型(点可以看做另一个端点(0,0)的向量)
    double x,y;
    Point(double _x=0,double _y=0):x(_x),y(_y){}//构造函数
    Point operator +(const Point &P) const{//向量减
        return Point(x+P.x,y+P.y);//使用构造函数
    }
    Point operator -(const Point &P) const {//向量减
        return Point(x-P.x,x+P.x);
    }
    double operator ^(const Point &P) const{//向量叉积
        return x*P.y-y*P.x;
    }
    Point operator *(const double &val) const{//向量乘实数
        return Point(x*val,y*val);
    }
    Point operator /(const double &val) const{//向量除以实数
        return Point(x/val,y/val);
    }
}p[Max_n],p0;

inline int sign(const double &x){//判断一个数(double)的正负
    if(x>eps) return 1;
    if(x<-eps) return -1;
    return 0;
}
//计算两点间距离
inline double dis(const Point &p0,const Point &pi){//|p0pi|
    return sqrt((p0.x-pi.x)*(p0.x-pi.x)+(p0.y-pi.y)*(p0.y-pi.y));
}
//计算两个向量的叉积
inline double mul(const Point &p0,const Point &p1,const Point &p2){//叉积 p0p1,p0p2
    return (p1-p0)^(p2-p0);//使用向量减和叉积
}
//计算两个向量的点积
inline double mul1(const Point &p0,const Point &p1,const Point &p2){
    return (p1-p0).x*(p2-p0).y-(p2-p0).x*(p1-p0).y;
}

int main(){
    return 0;
}