1. 主页
  2. 文档
  3. 计算机图形学基础教程
  4. 计算机图形学基础 数学杂项
  5. 三角学

三角学

在图形学中,我们在许多情况下使用基本的三角学。通常情况下,它没有什么太多花里胡哨的东西,而且往往有助于记住基本定义。

角度

尽管我们在某种程度上认为角是理所当然的,但我们应该回到它们的定义,这样我们就可以把角的概念延伸到球体上。一个角是在两条半线(源于原点的无限射线)或方向之间形成的,必须用一些惯例来决定它们之间形成的角的两种可能性,如图2.6所示。一个角是由它在单位圆上切出的弧段的长度来定义的。一个常见的惯例是使用较小的弧长,而角度的符号则由两条半线的顺序决定。使用该惯例,所有的角度都在[-π, π]范围内。

图2.6. 两条半线将单位圆切成两个弧。任何一条弧的长度都是两条半线 “之间 “的一个有效角度。我们可以使用较小的长度就是角度的约定,或者说,两条半线以一定的顺序指定,决定角度ϕ的弧线是从第一条半线到第二条半线逆时针扫出的那条。

这些角度中的每一个都是被这两个方向 “切割 “的单位圆弧的长度。因为单位圆的周长是2π,所以两个可能的角度之和为2π。这些弧长的单位是弧度。另一个常见的单位是度,其中圆的周长是360°。因此,一个π弧度的角是180°,通常表示为 180°. 度和弧度之间的转换是

Degrees =$\frac{180}{π}$ radians
Radins =$\frac{π}{180}$ degrees

三角函数

图2.7. 勾股定理的几何演示。

给定一个边长为a、o和h的直角三角形,其中h是最长边的长度(总是与直角相对),或斜边,勾股定理描述了一种重要的关系。

$a^2 + o^2 = h^2$

你可以从图2.7中看到这一点,大正方形的面积为$(a+o)^2$,四个三角形的面积之和为2ao,而中心正方形的面积为$h^2$。

因为三角形和内部的正方形均匀地分割了较大的正方形,所以我们有2ao + $h^2$ = (a + o)^2$,这很容易被处理成上述形式。

我们定义ϕ的正弦和余弦,以及其他基于比率的三角函数表达式。

sinϕ ≡ o/h
cscϕ ≡ h/o
cosϕ ≡ a/h
secϕ ≡ h/a
tanϕ ≡ o/a
cotϕ ≡ a/o

这些定义允许我们建立极坐标,其中一个点被编码为与原点的距离和相对于正X轴的带符号的角度(图2.8)。注意惯例,角度在ϕ∈(-π,π)的范围内,正角度是从正X轴的逆时针方向。逆时针映射到正数的这个约定是任意的,但它在图形的许多情况下都被使用,所以值得记忆一下。

图2.8. 点($x_a,y_a$)=(1,$\sqrt[]{3}$)的极坐标是($r_a,ϕ_a$)=(2,$\frac{π}{3}$)。

三角函数是周期性的,可以接受任何角度作为参数。例如,sin(A) = sin(A +2π) 。这意味着当考虑到域R时,这些函数是不可反转的。这个问题可以通过限制标准反函数的范围来避免,这在几乎所有的现代数学库中都是以标准方式进行的(例如,Plauger (1991))。域和范围是

asin:[−1, 1] → [−π/2, π/2];
acos:[−1, 1] → [0, π];
atan: R → [−π/2, π/2];                              (2.2)
atan2 : $R^2$ → [−π, π].

最后一个函数atan2(s, c)通常非常有用。它接收一个与sin A成比例的s值和一个与cos A成比例的c值,并返回A,该系数被假定为正数。一种看法是,它返回二维直角坐标点(s,c)在极坐标中的角度(图2.9)。

图2.9. 函数atan2(s,c)返回角度A,在图形中常常非常有用。

有用的特性

本节列出了各种有用的三角函数特性,但没有推导。

移位等式(Shifting identities):

sin(−A) = −sinA

cos(−A) = cosA

tan(−A) = −tanA

sin(π/2 − A) = cosA

cos(π/2 − A) = sinA

tan(π/2 − A) = cotA

勾股定理(Pythagorean identities):

$sin^2A + cos^2A$ = 1

$sec^2A − tan^2A$= 1

$csc^2A − cot^2A$= 1

半角等式(Half-angle identities):

sin(A + B) = sinAcosB + sinBcosA

sin(A − B) = sinAcosB − sinBcosA

sin(2A) = 2sinAcosA

cos(A + B) = cosAcosB − sinAsinB

cos(A − B) = cosAcosB + sinAsinB

cos(2A) = $cos^2A − sin^2A$

tan(A + B) =$\frac{tanA+tanB}{1−tanAtanB}$

tan(A − B) =$\frac{tanA−tanB}{1+tanAtanB}$

tan(2A) =$\frac{2tanA}{1−tan^2A}$

半角等式(Half-angle identities):

$sin^2(A/2)$ = (1 − cosA)/2

$cos^2(A/2)$ = (1 + cosA)/2

积等式(Product identities):

sinAsinB = − (cos(A + B) − cos(A − B))/2

cosAcosB = − (cos(A + B) + cos(A − B))/2

sinAcosB = − (sin(A + B) + sin (A − B))/2

以下是边长为a、b、c的任意三角形的特征,每个三角形的对角分别为A、B、C。角度,分别用A、B、C表示(图2.10)。

三角形的面积也可以用这些边长来计算。

三角形面积 =$\frac{1}{4}\sqrt[]{(a + b + c)(−a + b + c)(a − b + c)(a + b − c)}$

图2.10. 三角形定律的几何图形。

立体角和球面三角学

本节中的传统三角学涉及到平面上的三角形。三角形也可以定义在非平面上,在很多领域都会出现,比如天文学,就是单位半径球体上的三角形。这些球面三角形的边是球面上的大圆(单位半径的圆)的线段。对这些三角形的研究是一个被称为球面三角学的领域,在图形学中并不常用,但有时,当它出现时是很关键的。我们不会在这里讨论它的细节,但希望读者知道,当这些问题出现时,有一个区域存在,而且有很多有用的规则,如球面余弦律和球面正弦律。关于使用球面三角学机制的一个例子,请看关于取样三角形光(投射到球面三角形)的论文(Arvo, 1995b)。

对计算机图形而言,更重要的是立体角度。角度使我们能够量化诸如 “在我的视野中这两根柱子的距离是多少 “这样的事情,而立体角度则使我们能够量化诸如 “那架飞机覆盖了我的视野的多少 “这样的事情。对于传统的角,我们把柱子投射到单位圆上,并在单位圆上测量它们之间的弧长。我们经常与角度打交道,以至于我们中的许多人可能会忘记这个定义,因为它现在对我们来说都是如此直观。立体角也同样简单,但它们可能看起来更令人困惑,因为我们大多数人都是在成年后才了解它们。对于立体角,我们把 “看到 “飞机的可见方向投射到单位球体上,并测量其面积。这个面积就是立体角,与弧长就是角的方式相同。角度以弧度为单位,总和为2π(单位圆的总长度),而立体角则以球面度(steradians)为单位,总和为4π(单位球体的总面积)。

 

这篇文章对您有用吗? 1 1