计算几何 dls

本文介绍了实数比较的方法,并深入探讨了几何计算中的关键概念,包括点、点积、叉积及其应用。通过对比和实例,讲解了如何利用这些数学工具解决实际问题,如角度判断、向量垂直性检测、三角形面积计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实数比较

#define double db
const db EPS=1e-9;
int sign(db a){ return a<-EPS?-1:a>EPS };
int cmp(db a,db b){ return sign(a-b)};

struct P{
	db x,y;
	P(){}
	P(db _x,db _y):x(_x),y(_y){}
	P operator+(P p){ return {x+p.x,y+p.y}; }
	P operator-(P p){ return {x-p.x,y-p.y}; }
	P operator*(db d){ return {x*d,y*d}; }
	P operator/(db d){ return {x/d,y/d};}
	bool operator<(P p) const {
		int c=cmp(x,p.x);
		if(c) return c==-1;
		return cmp(y,p.y)==-1;
	} 
	bool operator==(P o) const {
		return cmp(x,o.x)==0&&cmp(y,o.y)==0;
	}
}

点积和叉积

db dot(P p){ return x*p.x+y*p.y; }//点积
db det(P p){ return x*p.y-y*p.x; }//叉积

\underset{p}{\rightarrow}=(px,py)\underset{q}{\rightarrow}=(qx,qy),则点积\underset{p}{\rightarrow}·\underset{q}{\rightarrow}=px\cdot qx+py\cdot qy=|\underset{p}{\rightarrow}|·|\underset{q}{\rightarrow}cos\theta,当cos\theta正,夹角为锐角,当cos\theta负,夹角为钝角,当cos\theta为0,两个向量互相垂直。\underset{p}{\rightarrow}\underset{q}{\rightarrow}的投影长度为|\overset{}{\rightarrow}p|·cos\theta

叉积\underset{p}{\rightarrow}*\underset{q}{\rightarrow}=px\cdot qy-py\cdot qx=|\underset{p}{\rightarrow}|·|\underset{q}{\rightarrow}|·sin<\underset{p}{\rightarrow},\underset{q}{\rightarrow}> 当\underset{q}{\rightarrow}\underset{p}{\rightarrow}的逆时针方向夹角为正, 当\underset{q}{\rightarrow}\underset{p}{\rightarrow}顺时针方向夹角为负。则当叉积大于0时\underset{q}{\rightarrow}\underset{p}{\rightarrow}的逆时针方向,小于0时\underset{q}{\rightarrow}\underset{p}{\rightarrow}顺时针方向,等于0时\underset{q}{\rightarrow}\underset{p}{\rightarrow}同向或反向。当点积\underset{p}{\rightarrow}·\underset{q}{\rightarrow}大于0时为同向,小于0时为反向。

当点积\underset{p}{\rightarrow}·\underset{q}{\rightarrow}大于0时,\underset{q}{\rightarrow}在以\underset{p}{\rightarrow}为x轴正方向的坐标系的一、三象限、当叉积\underset{p}{\rightarrow}*\underset{q}{\rightarrow}大于0时,\underset{q}{\rightarrow}在以\underset{p}{\rightarrow}为x轴正方向的坐标系的一、二象限。

\underset{p}{\rightarrow}\underset{q}{\rightarrow}组成三角形的面积S=1/2·|p|·|q|·sin\theta=1/2·|\underset{p}{\rightarrow}*\underset{q}{\rightarrow}|。

极角排序

atan2(y,x); //返回值在(-180度,+180度)之间,用该函数获取每个向量的极角,再用sort排序即可
//缺点1:慢    缺点2:精度问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值