引入抽象是有原因的:它可以帮助你组织和交流更宏大、更强有力的思想。
数学在许多软件工程领域都有着趣味盎然和收益颇丰的应用。
数学可以量化随时间变化的数据的趋势,如预测股票价格的走势。
数字元组(称为向量)代表多维数据。具体来说,三维向量是三元数对,可以表示空间中的点。可以通过组合向量指定的三角形来构建复杂的三维图形。
微积分是研究连续变化的数学。许多物理定律是用微积分方程来写的,这些方程称为微分方程。
作为一名程序员,你已经训练了自己精确思考和沟通的能力,这种技能也会帮助你学习数学。
本书中使用了大量的二维向量,是我们用于推理高维问题的跳板。
从角度和距离的关系来看,角的正切等于垂直距离除以水平距离(见图2-39)。
第3章 上升到二维世界
本章内容
- 建立三维向量的心智模型
- 进行三维向量运算
- 使用点积和向量积测量长度和方向
- 在二维平面上渲染三维对象
但即使程序模拟了三维空间,大多数计算机屏幕只能显示二维画面。本章的任务是构建一些工具,用于把三维向量测量的三维对象转换成二维的,来把这些对象显示在屏幕上。
在二维平面上,向量拥有三种可互换的心智模型:坐标对、有固定长度和方向的箭头以及相对于原点的点。
我的包装器使用了诸如Points3D和Arrow3D这些新的类来将三维对象和二维对象区分开来。新函数draw3d负责解释和渲染三维对象,让它们看起来是三维的。
draw3d(
Points3D((2,2,2),(1,-2,-2))
)
点积和向量积
点积取两个向量并返回一个标量(数),而向量积取两个向量并返回另一个向量。
点积(Dot Product)和向量积(Cross Product)是两种在向量空间中定义的运算,它们在数学、物理学和工程学等领域有着广泛的应用。
- 点积(Dot Product):
点积,也称为标量积或内积,是两个向量的一种乘法运算,其结果是一个标量(即一个数值)。点积的计算公式如下:
对于两个向量 a = (a1, a2, ..., an) 和 b = (b1, b2, ..., bn)(其中 n 是向量的维度),它们的点积定义为:
[ \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + \cdots + a_nb_n ]
在二维空间中,点积可以表示为:
[ \mathbf{a} \cdot \mathbf{b} = a_xb_x + a_yb_y ]
在三维空间中,点积可以表示为:
[ \mathbf{a} \cdot \mathbf{b} = a_xb_x + a_yb_y + a_zb_z ]
点积的几何意义是,它等于两个向量的模(magnitude)的乘积与它们之间夹角的余弦值。如果两个向量的点积为零,那么这两个向量是正交的(即它们之间的夹角为90度)。
- 向量积(Cross Product):
向量积,也称为外积,是两个向量的一种乘法运算,其结果是一个向量。这个新向量垂直于原来的两个向量构成的平面,并且其方向遵循右手定则。向量积的计算公式如下:
对于两个三维向量 a = (a1, a2, a3) 和 b = (b1, b2, b3),它们的向量积 c = (c1, c2, c3) 定义为:
[ \mathbf{c} = \mathbf{a} \times \mathbf{b} = \begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k} \
a_1 & a_2 & a_3 \
b_1 & b_2 & b_3 \
\end{vmatrix} ]
这里,i、j、k 是三维空间中的单位向量,矩阵的行列式计算结果给出了向量积的各个分量。向量积的模(magnitude)等于两个向量模的乘积与它们之间夹角的正弦值,方向由右手定则确定。
向量积的几何意义是,它可以用来计算两个向量构成的平行四边形的面积,或者在物理学中,用来计算力矩。
在实际应用中,点积和向量积可以用来解决各种问题,如计算投影、判断向量是否正交、计算力和力矩等。
点积(Dot Product)和向量积(Cross Product)是两种在向量空间中定义的运算,它们在数学、物理学和工程学等领域有着广泛的应用。
- 点积(Dot Product):
点积,也称为标量积或内积,是两个向量的一种乘法运算,其结果是一个标量(即一个数值)。点积的计算公式如下:
对于两个向量 a = (a1, a2, ..., an) 和 b = (b1, b2, ..., bn)(其中 n 是向量的维度),它们的点积定义为:
\(\mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + \cdots + a_nb_n\)
在二维空间中,点积可以表示为:
\(\mathbf{a} \cdot \mathbf{b} = a_xb_x + a_yb_y\)
在三维空间中,点积可以表示为:
\(\mathbf{a} \cdot \mathbf{b} = a_xb_x + a_yb_y + a_zb_z\)
点积的几何意义是,它等于两个向量的模(magnitude)的乘积与它们之间夹角的余弦值。如果两个向量的点积为零,那么这两个向量是正交的(即它们之间的夹角为90度)。
- 向量积(Cross Product):
向量积,也称为外积,是两个向量的一种乘法运算,其结果是一个向量。这个新向量垂直于原来的两个向量构成的平面,并且其方向遵循右手定则。向量积的计算公式如下:
向量积的几何意义是,它可以用来计算两个向量构成的平行四边形的面积,或者在物理学中,用来计算力矩。
在实际应用中,点积和向量积可以用来解决各种问题,如计算投影、判断向量是否正交、计算力和力矩等。
右手规则
这就是点积最重要的应用之一:在不做任何三角运算的情况下,计算两个向量是否垂直。这种垂直的情况也可以用来区分其他情况:如果两个向量的夹角小于90°,则向量的点积为正;如果夹角大于90°,则
向量的点积为负
点积为零的两个向量在三维空间中确实是垂直的
3.4 向量积:测量定向区域
它与点积的相似之处在于,输入向量的长度和相对方向决定了输出;但不同之处在于,它的输出不仅有大小,还有方向。
向量积总是返回垂直于两个输入的向量
向量积的长度等于一个平行四边形的面积
现在是时候开始我们的终极项目了:用多边形构建一个三维对象,并在二维画布上绘制它。你会使用到目前为止见过的所有向量操作。特别是,向量积将帮你判断哪些多边形是可见的。
3.5 在二维平面上渲染三维对象
小结:
二维中的向量有长度和宽度,而三维空间中的向量还有高度。
三维向量是由称为坐标、坐标和坐标的三元数对定义的。这些坐标说明了三维空间中的某个点在每个方向上距离原点有多远。
和二维向量一样,三维向量也可以与标量进行加法、减法和乘法运算。我们可以用勾股定理的三维版本来求它们的长度。
点积是将两个向量相乘并得到一个标量的方法。它衡量了两个向量的对齐程度,其值也可以用来计算两个向量的夹角。
向量积是将两个向量相乘得到第三个向量的方法,这个向量与两个输入向量垂直。向量积的输出大小就是两个输入向量张成的平行四边形的面积。
任何三维对象的表面都可以表示成三角形的集合,其中每个三角形分别由代表其顶点的三个向量定义。
使用向量积,我们可以确定三角形在三维空间中可见的方向。由此可知三角形对观察者是否可见,或者它在给定光源下被照亮的程度。通过绘制和定义对象表面的所有三角形并进行着色,可以让其
看起来立体感十足。
导数和积分。这两个概念都是与函数有关的运算。导数取一个函数,返回表示其变化率的函数。积分则相反:它取表示变化率的函数,返回原始累积值的函数。