计算几何学习笔记
0 - 前置
0.1 rad
把长度等于半径长的弧所对的圆心角称为
由此,
称一个角
0.1.1 的计算
使用 acos(-1)
得到的
当然我会背,3.14159265358979323846264388,平时取十几位就够了。
0.2 - 坐标系
0.2.1 - 平面直角坐标系
初中常用,不详细讲了,注意到坐标系两维的单位长度可以调整。直角坐标记为有序数对
0.2.2 - 平面极坐标系
初中数学书上提到过,就是一维为长度,有正方向
注意到,
平面直角坐标系与平面极坐标系的转换
画图易证。
设
设 cmath
库提供了函数 atan2(y,x)
可以通过分类讨论解决这个问题。
0.3 - vector
0.3.1 - definition
记为
有向线段: 带有方向的线段,
模: 有向线段的长度,记为
对于二维向量(下简记为②):
double length(){
return x*x+y*y;
}
double mod(){
return sqrt(length());
}
零向量,单位向量: 记为
平行: 两向量平行
②,对于两向量
bool friend parallel(vec_2 a,vec_2 b){
if(!a.x&&!b.x) return 1;
if(!a.x||!b.x) return 0;
double k1=a.y/a.x,k2=b.y/b.x;
return k1==k2;
}
相等/相反向量: 模相等,方向相同/反的向量。
②:
bool friend operator==(vec_2 a,vec_2 b){
return equal(a.mod(),b.mod())&¶llel(a,b);
}
向量夹角: 两非零向量
向量不能比较大小,但能比较模长和判断相等。
0.3.2 - calculation
加法
类比物理中的力的合成以及位移知识,可以知道:
三角形法则: 若要求和的向量首尾顺次相连,那么这些向量的和为第一个向量的起点指向最后一个向量的终点;
平行四边形法则: 若要求和的两个向量 共起点,那么它们的和向量为以这两个向量为邻边的平行四边形的对角线,起点为两个向量共有的起点,方向沿平行四边形对角线方向。
由图易知,加法满足交换律结合律。
②,对于两向量
vec_2 friend operator+(const vec_2 a,const vec_2 b){
return vec_2(a.x+b.x,a.y+b.y);
}
减法
注意到
②,对于两向量
vec_2 friend operator-(const vec_2 a,const vec_2 b){
vec_2 c=vec_2(-b.x,-b.y);
return a+c;
}
乘法
向量的乘法有两种,一是点积(数量积),二是叉积(向量积)。结果类型不同。
点积定义为
有一些性质如下:
共线
②,对于两向量
double friend dot(vec_2 a,vec_2 b){
return a.x*b.x+a.y*b.y;
}
叉积比较特殊,它只能定义在三维和七维空间里。
现在只讨论三维的叉积。
三维空间内两向量
右手定则是一个利用右手的拇指、食指和中指来判断三个相互垂直的向量的方向的方法。 具体来说,当我们将右手的食指指向第一个向量的方向,中指指向第二个向量的方向时,拇指所指的方向就是这两个向量叉乘的方向。 这个定则非常直观,易于操作,是物理学和工程学中判断向量叉乘方向的常用方法。
③,对于两向量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具