第一章

本章涵盖了数系统和计算机图形学基础、二维笛卡尔数学、三维笛卡尔数学以及先决条件复习。

1D 数学

数学定义 :

  • 自然数:通常称为计数数, 几千年前为了方便计算物体的数量发明了 0、1、2、3、4... 这样的数,涵盖了 0 和正整数。
  • 整数:当物品被卖掉的时候迫使人们发现了债务和负数的重要概念,卖掉一件物品被标记成"负一"物品,从而负整数、0、正整数被统称为整数。
  • 有理数:当人们的拥有和负债不在是完整的 1 个,或是一半、或是四分之一。这导致了分数的出现 1/2、1/4。但是人类为了追求简便发明了分数十进制表示法,例如写“3.1415”而不是更长、更乏味的 31415/10000。所以整数和分数 (小数)统称为有理数。
  • 实数:当出现了一些无法表示为有理数的数字,比如pi,这些被称为无理数的数和有理数在一起便被称为实数。

现实世界是离散的,计算机是离散的和有限的

什么是离散?

是指由分离的、不连续的元素或个体组成,这些元素或个体之间有明显的间隔或界限。与连续相对,连续是指元素或个体之间没有明显的间隔,可以无限制地接近。

  1. 可数性:离散的元素或个体是可数的,即可以用自然数(1, 2, 3, ...)来一一对应。
  2. 分离性:离散的元素或个体之间是分离的,彼此之间有明确的界限,不会相互融合。
  3. 不连续性:离散的元素或个体在空间或时间上是不连续的,它们不会形成一个连续的序列或范围。 所以整数是离散的,因为每个整数都是分离的、可数的,并且整数之间有明确的界限。

现实世界中的离散性指的是世界中存在许多离散的可数的元素和现象。这些元素和现象可以被单独地识别和计数,而不是构成一个连续的、不可分割的整体。例如,人的年龄、人口数量、物体的数量等都是离散的,因为它们可以被表示为具体的、可数的数值。计算机的离散性源于其基本的结构和工作原理,即由0和1组成的数据,因此计算机只能处理离散的数据。

基础数学

累加求和

i 称为索引变量,求和符号上方和下方的表达式告诉我们执行“循环”的次数以及每次迭代期间要使用的。

在代码等同于:

func var a(int i);

var sum = 0;
for(int i=1,i<=6,i++){
    sum += a(i);
}

∑求和表示法也称为西格玛表示法,因为看起来像 E 的酷炫符号是希腊字母西格玛的大写版本。

区别累加和阶加“∑”是累加符号,而阶加符号为"?",记为

同时它也能够被求和符号表示为:

乘积累乘

当我们取一系列值的乘积时,使用类似的表示法,只是我们使用符号“∏”,这是字母“π”的大写。

代码等同于:

func var a(int i);

var sum = 0;
for(int i=1,i<=n,i++){
    sum *= a(i);
}

区别累乘符号“∏”和阶乘“!”,阶乘被标示为

同时他也能被累乘表示为:

区间表示

[a, b] 的意思是“从 a 到 b”,读作“所有数字 x,使得 a≤x ≤b”,同时这也是向量表示方法 (a, b) 读作“所有数字 x,使得 a<x <b”,同时这也是二维点表示方法。 同时也有可能出现半开放区间 [a, b)(a, b] 如果一端是无限的则记为 [a, ∞)

表示角度

角度的变量通常被分配为希腊字母“θ”,指定角度的最重要的测量单位是度 (°) 和弧度 (rad)

当我们以弧度为单位指定两条光线之间的角度时,我们实际上是在测量单位圆(以半径为 1 的原点为中心的圆)的截获弧的长度 //

数字 360 是一个相对武断的选择,它可能起源于原始历法,例如波斯历法,它将一年分为 360 天。这个错误从未被纠正为 365,因为数字 360 非常方便。数字 360 有多达 22 个除数(不包括自身和 1):2、3、4、5、6、8、9、10、12、15、18、20、24、30、36、40、45、60、72、90、120 和 180。这意味着 360 度可以在大量情况下平均分配,而不需要分数,这对早期文明来说显然是一件好事。早在公元前 1750 年,巴比伦人就设计了一种六十进制(以 60 为基数)的数字系统。数字 360 也足够大,因此在许多情况下,精确到最接近的整度就足够了。

三角函数

点的坐标具有特殊性,并且在数学上特别重要,以至于他们被赋予了特殊函数。 余弦 cosθ = x,正弦 sinθ = y。 割线、余割线、切线和余切线也是有用的三角函数

hypadjopp 分别指斜边、相邻边和侧边的长度。 //

对于钝角,我们使用 x、y、r 表示比率 //

该表显示了几个不同的角度,以度数和弧度表示,以及它们的主三角函数的值。 //

根据单位圆的对称性,可以推到许多恒等式:

勾股定理

通过将勾股定理应用于单位圆,可以推导出恒等式

当 a 和 b 相等的时候,可得到以下恒等式

以下恒等式适用于任何三角形,而不仅仅是直角三角形。 //

计算机图形学第一定律

如果它看起来是对的,它就是对的。

2D笛卡尔空间

计算机中最常使用表示空间的框架称为笛卡尔坐标系。

笛卡尔数学是由一位杰出的法国哲学家、物理学家、生理学家和数学家勒内·笛卡尔发明的(并以他的名字命名),他生活在 1596 年至 1650 年之间。

该图是 2D 笛卡尔坐标系的示意图 // 二维笛卡尔坐标空间由两条信息定义:

  • 二维笛卡尔坐标空间都有一个特殊的位置,称为原点,它是坐标系的“中心”。
  • 每个二维笛卡尔坐标空间都有两条穿过原点的直线。每条线被称为一个,在两个相反的方向上无限延伸。两个轴彼此垂直。

本可以使用向右为+x、向上+y 的标准笛卡尔坐标系规划一切走向,但有时规划者有时会已任何方便的方式定位轴。例如计算机处理屏幕图像时通常使用如下的坐标系,它的原点位于左上角+x 指向右侧,+y 指向下方。 // 这种被称作屏幕坐标空间、设备坐标或者是物理坐标的空间设定,源自于早期的阴极射线管显示器,方便从左上角向右一行一行扫描,也是为了和代表像素的二维数组形成对应关系,方便阅读。

二维坐标系特性

任何可能的方向轴都可以由其它方向轴通过旋转、倒置或反转得到不被扭曲的原始形状,这是 2D 中可能存在的方向轴。 //

如何表示二维位置

我们使用 (x, y) 形式指定点在二维坐标的位置,两个数字中的每一个都指定了该点位于原点的哪一侧,以及该点在该方向上与原点的距离。 //

3D 笛卡尔空间

建立额外的轴

3D 中增加同时垂直于 xy 的 z 轴,设置的所有轴都是相互垂直的。 //

在 3 D 中任何一对轴都定义一个包含两个轴并垂直于第三个轴的平面。

例如 xy 轴组成的平面垂直于 z 轴。

如何表示三维位置

使用 (x,y,z) 三个数字来指定点,它们分别代表了点和 yz、xz、xy 平面的有符号距离。 //

左手坐标系和右手坐标系

3D 坐标空间不适用 2D 坐标系特性,即左手坐标系无法通过旋转、倒置或反转得到右手坐标系。 //

左手坐标系和右手坐标系在“正旋转”的定义上也有所不同。在空间设定一条任意的线,需要围绕这条线旋转一个指定角度,我们称这条线为旋转轴左手定则中将左手置于“竖起大拇指”的位置,拇指指向旋转轴的正端。绕旋转轴的正向旋转是手指卷曲的方向。而右手定则相反。 //

如果你是 Unity、DirectX 的开发者,那么值得庆幸本书所使用的都是与它们相同,Y 轴向上的左手坐标系。

  • OpenGL Maya、Godot 使用 Y 轴向上的右手坐标系
  • UE 使用 Z 轴向上的左手坐标系
  • Blender、3D Max、source 使用 Z 轴向上的右手坐标系

引用声明

本文中使用的图片均引自_《3D Math Primer for Graphics and Game Development》_ ,作者 Fletcher Dunn Dunn, Fletcher,出版社 A K Peters/CRC Press,出版日期 2022 年。