二维计算几何基础:从弧度到三角函数到向量到操作
二维计算几何基础:从弧度到三角函数到向量到操作
单位圆
以原点为圆心,1 为半径的圆称为单位圆。单位圆的解析式为 \(x^2+y^2=1\)。
从角度到弧度
角度:把一圆周分为 360 等分,每等分为 \(1^{\circ}\)。
弧度:记一圆周弧度的值为 \(2\pi\)。一个角弧度在数值上等于单位圆上这个角所对弧的弧长。
弧度的单位为 rad,一般省略不写。
弧度制下角的动态意义:射线从一个位置绕其端点旋转到另一个位置形成角。逆时针旋转形成数值为正的角,顺时针旋转形成数值为负的角。
例子:
| 角度 | 360 | 180 | 90 | 45 |
|---|---|---|---|---|
| 弧度 | \(2\pi\) | \(\pi\) | \(\frac \pi 2\) | \(\frac \pi 4\) |
在 c++ 中高精度的 \(\pi\) 可以由 acos(-1) 或 acosl(-1) 得到。
二维极坐标系与极角
极角:由 \(x\) 轴正方向旋转得到的角,单位为弧度。显然 \(\theta\) 与 \(\theta\pm2\pi\) 在平面上对应的角是一样大的。
我们用极角与点到原点的距离表示一个点。就是极坐标系。
在 c++ 中,可以使用 <cmath> 中的 atan2(y,x) 求点 \((x,y)\) 对应的极角。它的取值为 \((-\pi,\pi]\),即 \(x\) 轴上方为正,\(x\) 轴下方为负。
三角函数
锐角三角函数
初中学锐角三角函数,即在直角三角形中,记 \(\theta\) 为锐角的度数。
- 正弦 \(\sin \theta\),对边与斜边的比值。
- 余弦 \(\cos\theta\),邻边与斜边的比值。
- 正切 \(\tan \theta\),对边与邻边的比值。显然有 \(\tan\theta=\frac {\sin \theta}{\cos \theta}\)
它们三个都有对应的反三角函数,即带入比值求角的大小。
任意角的三角函数
定义:在单位圆上,极角为 \(\theta\) 的点的坐标为 \((\cos \theta,\sin \theta)\)。
定义:\(\tan\theta=\frac {\sin\theta}{\cos \theta}\)。
那么根据单位圆的解析式就有:
在 c++ 中,可以使用数学库中的 sin,cos,tan,它们的单位都是弧度制,且 \(\pm2\pi\) 对数值无影响。
c++ 中同时还有 asin,acos,atan 反三角函数。
关于反三角函数的取值与定义域:
- 注意
asin与acos的定义域为 \([-1,1]\),它们的值域分别为 \([-\frac \pi2,\frac \pi2]\) 和 \([0,\pi]\),这是因为每个 \(\sin\) 或 \(\cos\) 的取值都对应了两个角,c++ 中asin求的是 \(y\) 轴右侧的角,acos求的是 \(x\) 轴上方的角。 - 而
atan由于关于原点对称点的极角的 \(\tan\) 相同,所以它的取值为 \([-\frac \pi 2,\frac \pi 2]\),即只有 \(y\) 轴右侧的角。
正弦定理
在三角形 \(ABC\) 中,记 \(a,b,c\) 分别为 \(A,B,C\) 的对边,\(R\) 为外接圆的半径。
余弦定理
在三角形 ABC 中,记 \(a,b,c\) 分别为 \(A,B,C\) 的对边。
向量
有方向的量。向量由起始点、方向、长度构成。可以理解为有方向的线段。
向量是可以平移的,不同的向量只取决于方向与长度不同。
我们用小写字母 \(a\) 表示向量,也可以用 \(AB\) 表示起始点为 \(A\),终止点为 \(B\) 的向量。
向量的坐标表示
我们把向量的起始点平移到原点,用终止点的坐标 \((x,y)\) 表示这个向量,即起始点与终止点的坐标差。
在物理学上,可以把向量 \((x,y)\) 看作在平面上沿着向量行走到了 \((\Delta x,\Delta y)\)。
向量的关系
向量的模:\(|a|=\sqrt {x^2+y^2}\),即向量的长度。
相等向量:模相等且方向相同的向量,即 \(x=x'\land y=y'\)。
相反向量:\(a\) 与 \(-a\),模相等且方向相反的向量,即 \(x=-x'\land y=-y'\)。
平行向量:方向相反或相同的向量,注意与向量的模无关。
向量加减法
向量加法:\(a+b\),可以理解为先走 \((\Delta x,\Delta y)\),再走了 \((\Delta x',\Delta y')\),这等价于走了 \((\Delta(x+x'),\Delta(y+y'))\),于是加法就是 \((x+x',y+y')\),即 \(AB+BC=AC\)。
平行四边形法则:由于 \(a+b=b+a\),所以在平行四边形 \(ABCD\) 中,有 \(AB+BD=AC+CD=AD\)。
向量减法:\(a-b=a+(-b)\),即 \((x-x',y-y')\)。
向量夹角
向量夹角:把它们的起始点平移到一个点时,两向量的夹角。记为 \(\theta\)。
我们可以判断向量的关系:
- \(\theta=0\) 时,同向。
- \(\theta=\frac \pi 2\) 时,垂直。
- \(\theta=\pi\) 时,反向。
向量数乘
向量 \(a\) 与实数 \(k\) 相乘的结果记为 \(ka\)。
满足两条法则:
- \(|ka|=|k||a|\)。
- 若 \(k>0\),方向不变;若 \(k<0\) 则方向相反。
即 \(k(x,y)=(kx,ky)\)。
向量点积
点积也叫内积或数量积。
记 \(\theta\) 为 \(a\) 逆时针旋转到 \(b\) 的夹角。则有
几何意义:\(|b|\cos \theta\) 为 \(b\) 在 \(a\) 方向上的投影的长度。
其在数值上等于 \(x_1x_2+y_1y_2\)。
内积满足交换律。\(a\cdot b=b\cdot a\)。
计算向量夹角
即
判断向量垂直
垂直就是其中一向量在另一向量上的投影为 0。可以推得两向量垂直当且仅当:
即
判断向量平行 1
即投影的绝对值就是向量的长度。则两向量平行当且仅当:
向量叉积
向量的叉积又叫向量的外积。
在数值上等于 \(x_1y_2-x_2y_1\)。
计算平行四边形面积
在二维向量中,叉积是一个数,其绝对值的几何意义是以两向量为邻边,\(\theta\) 为邻边夹角的平行四边形面积。
判断向量平行 2
那么平行四边形的面积就应当是 0。
所以两向量平行当且仅当:
图形的表示
点
用二元组 \((x,y)\) 表示。
线段
我们可以用左右两个端点表示,即用 \((x_1,y_1,x_2,y_2)\) 表示一条线段,其中 \(x_1\le x_2\)。
直线与射线
我们不要用一次函数解析式了,那是在是太麻烦了。
我们可以用直线上一点或射线端点,再加上表示这条线倾斜程度的向量表示。
即 \((P,v)\),其中 \(P\) 是一个点,\(v\) 是一个向量。
多边形
记录一个起始点,再顺序记录每条边的向量即可。
判断点与直线的位置关系
对于直线 \((P,v)\),和点 \(Q\),根据向量叉乘,我们有:
- \(PQ\times v=0\),则 \(Q\) 在直线上。
- \(PQ\times v>0\),则 \(Q\) 在直线右侧。
- \(PQ\times v<0\),则 \(Q\) 在直线左侧。
判断线段是否相交
快速排斥试验
对于一组线段 \((x_1,y_1,x_2,y_2),(x_3,y_3,x_4,y_4)\)。
如果分别以两条线段为对角线的,边与坐标轴平行的,这样分别组成的两个矩形没有公共部分,那么两条线段不交。
即当 \(\max(x_1,x_2)<\min(x_3,x_4)\) 或 \(\max(y_1,y_2)<\min(y_3,y_4)\) 时,两线段不交。
用代码表示就是:
bool fast_check(seg A,seg B){
if(max(A.x1,A.x2)<min(B.x1,B.x2)||max(B.x1,B.x2)<min(A.x1,A.x2)) return 0;
if(max(A.y1,A.y2)<min(B.y1,B.y2)||max(B.y1,B.y2)<min(A.y1,A.y2)) return 0;
return 1;
}
跨立试验
如果通过了快速排斥试验,还要通过跨立试验才能判断两线段是否相交。
其内容是,对于线段 \((A,B),(C,D)\),\(C,D\) 在直线 \(AB\) 的异侧。
如果既通过了快速排斥试验,又通过了跨立试验,则说明两线段相交。
计算多边形的面积
我们选一个辅助点 \(O\),计算它到所有点的向量,可以向量叉乘算出平行四边形面积,则其二分之一就是三角形面积。

浙公网安备 33010602011771号