计算几何 - 点积与叉积
程序员文章站
2022-04-02 09:39:55
...
几何意义:
向量的点积(a · b ):a · b = |a||b| ,若 为正,两向量之间的夹角为锐角;为负,两向量夹角为钝角;为量,两向量夹角为直角。(b 在 a 方向上的投影)。
向量的叉积(a × b ):a · b = |a||b| ,数值上表示 a 和 b构成的平行四边形的面积。
#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;
}
推荐阅读
-
计算机体系结构(实验 3 使用 MIPS 指令实现求两个数组的点积 )
-
2020 年百度之星·程序设计大赛 - 测试赛 度度熊保护村庄 计算几何(叉积)+floyd(最小环)
-
Flash怎么计算向量点积? Flash两个向量点积的计算方法
-
点积和叉积(基本的东西,先挖个坑)
-
牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
-
2020 年百度之星·程序设计大赛 - 测试赛 度度熊保护村庄 计算几何(叉积)+floyd(最小环)
-
计算机体系结构(实验 3 使用 MIPS 指令实现求两个数组的点积 )
-
计算几何问题汇总--点与线的位置关系
-
计算几何 - 点积与叉积
-
计算几何(二)——点与向量