计算几何——向量
作者:互联网
计算几何第一篇——向量
这次西安邀请赛计算几何签到题都没做出来,题目有错是一回事,但是最主要的是自己实力的问题。对昨天学习内容的一个总结。
叉积:叉积就是向量积,表示p1,p2,和p1+p2所构成的平行四边形的有向面积。
在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。 对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标。
https://www.cnblogs.com/aiguona/p/7248311.html
存储点
struct point
{
double x,y;
}
计算叉积
double cross(double x1,double y1,double x2,double y2)//叉积计算
{
return x1*y2-x2*y1;
}
叉积的应用:确定连续线段是向左转还是向右转//判断两条线段是否相交。
计算极角
double compare(point a,point b,point c)
{
return cross(b.x-a.x,b.y-a.y,c.x-a.x,c.y-a.y);
}
极脚排序:
为何要进行极角排序?
有时候有些题会用到,所以要进行极角排序。
极角排序三种方法,但是第三种我没太看懂,简单介绍前两种方法:
atan2函数:
bool cmp1(point a,point b)
{
if(atan2(a.x,a.y)!=atan2(b.x,b.y))
return atan2(a.x,a.y)<atan2(b.x,b.y);
else return a.x<b.x;
}
tan函数求的是值,atan2求的是角度,对角度进行排序,角度相等的x小的放在前面,角度不相等的,角度小的放在前面。
利用叉积计算:
bool cmp2(point a,point b)
{
point c;
c.x=0;
c.y=0;
if(compare(c,a,b)==0)
return a.x<b.x;
else
return compare(c,a,b)>0;
}
叉积相等,则代表两向量平行,个人是觉得不能说成重合的,叉积>0,则向量a在向量b的顺时针方向(粗略的理解为在a在b的下方);叉积<0,则向量a在向量b的逆时针方向(粗略的理解为在a在b的上方)。
标签:计算,point,double,atan2,极角,叉积,几何,向量 来源: https://blog.csdn.net/cjh1459463496/article/details/90447110