二维计算几何基础:从弧度到三角函数到向量到操作

二维计算几何基础:从弧度到三角函数到向量到操作

单位圆

以原点为圆心,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}\)

那么根据单位圆的解析式就有:

\[\cos^2+\sin^2=1 \]

在 c++ 中,可以使用数学库中的 sincostan,它们的单位都是弧度制,且 \(\pm2\pi\) 对数值无影响。

c++ 中同时还有 asinacosatan 反三角函数。

关于反三角函数的取值与定义域:

  • 注意 asinacos 的定义域为 \([-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\) 为外接圆的半径。

\[\frac a {\sin A} =\frac b{\sin B}=\frac c {\sin C}=2R \]

余弦定理

在三角形 ABC 中,记 \(a,b,c\) 分别为 \(A,B,C\) 的对边。

\[a^2=b^2+c^2-2bc\cos A \]

向量

有方向的量。向量由起始点、方向、长度构成。可以理解为有方向的线段。

向量是可以平移的,不同的向量只取决于方向与长度不同。

我们用小写字母 \(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\) 的夹角。则有

\[a\cdot b=|a||b|\cos \theta \]

几何意义:\(|b|\cos \theta\)\(b\)\(a\) 方向上的投影的长度。

其在数值上等于 \(x_1x_2+y_1y_2\)

内积满足交换律。\(a\cdot b=b\cdot a\)

计算向量夹角

\[\theta=\arccos \frac{a\cdot b}{|a||b|} \]

\[\theta=\arccos \frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}} \]

判断向量垂直

垂直就是其中一向量在另一向量上的投影为 0。可以推得两向量垂直当且仅当:

\[a\cdot b=0 \]

\[x_1y_1+x_2y_2=0 \]

判断向量平行 1

即投影的绝对值就是向量的长度。则两向量平行当且仅当:

\[|a\cdot b|=|a||b| \]

向量叉积

向量的叉积又叫向量的外积。

\[a\times b=|a||b|\sin \theta \]

在数值上等于 \(x_1y_2-x_2y_1\)

计算平行四边形面积

在二维向量中,叉积是一个数,其绝对值的几何意义是以两向量为邻边,\(\theta\) 为邻边夹角的平行四边形面积。

判断向量平行 2

那么平行四边形的面积就应当是 0。

所以两向量平行当且仅当:

\[a\times b=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\),计算它到所有点的向量,可以向量叉乘算出平行四边形面积,则其二分之一就是三角形面积。

\[S=\frac 1 2\sum _{i=1}^n |v_i\times v_{i\bmod n+1}| \]

posted @ 2024-12-21 17:01  dengchengyu  阅读(202)  评论(0)    收藏  举报