1D 数学
数学定义 :
- 自然数:通常称为计数数, 几千年前为了方便计算物体的数量发明了 0、1、2、3、4... 这样的数,涵盖了 0 和正整数。
- 整数:当物品被卖掉的时候迫使人们发现了债务和负数的重要概念,卖掉一件物品被标记成"负一"物品,从而负整数、0、正整数被统称为整数。
- 有理数:当人们的拥有和负债不在是完整的 1 个,或是一半、或是四分之一。这导致了分数的出现 1/2、1/4。但是人类为了追求简便发明了分数十进制表示法,例如写“3.1415”而不是更长、更乏味的 31415/10000。所以整数和分数 (小数)统称为有理数。
- 实数:当出现了一些无法表示为有理数的数字,比如pi,这些被称为无理数的数和有理数在一起便被称为实数。
现实世界是离散的,计算机是离散的和有限的
什么是离散?
是指由分离的、不连续的元素或个体组成,这些元素或个体之间有明显的间隔或界限。与连续相对,连续是指元素或个体之间没有明显的间隔,可以无限制地接近。
- 可数性:离散的元素或个体是可数的,即可以用自然数(1, 2, 3, ...)来一一对应。
- 分离性:离散的元素或个体之间是分离的,彼此之间有明确的界限,不会相互融合。
- 不连续性:离散的元素或个体在空间或时间上是不连续的,它们不会形成一个连续的序列或范围。 所以整数是离散的,因为每个整数都是分离的、可数的,并且整数之间有明确的界限。
现实世界中的离散性指的是世界中存在许多离散的、可数的元素和现象。这些元素和现象可以被单独地识别和计数,而不是构成一个连续的、不可分割的整体。例如,人的年龄、人口数量、物体的数量等都是离散的,因为它们可以被表示为具体的、可数的数值。计算机的离散性源于其基本的结构和工作原理,即由0和1组成的数据,因此计算机只能处理离散的数据。
基础数学
累加求和
i 称为索引变量,求和符号上方和下方的表达式告诉我们执行“循环”的次数以及每次迭代期间要使用的。
在代码等同于:
∑求和表示法也称为西格玛表示法,因为看起来像 E 的酷炫符号是希腊字母西格玛的大写版本。
区别累加和阶加“∑”是累加符号,而阶加符号为"?",记为
同时它也能够被求和符号表示为:
乘积累乘
当我们取一系列值的乘积时,使用类似的表示法,只是我们使用符号“∏”,这是字母“π”的大写。
代码等同于:
区别累乘符号“∏”和阶乘“!”,阶乘被标示为
同时他也能被累乘表示为:
区间表示
[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。
割线、余割线、切线和余切线也是有用的三角函数
hyp 、adj 、opp 分别指斜边、相邻边和侧边的长度。
//
对于钝角,我们使用 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 年。