大学没有好好学习线性代数,无奈只能再次复习。
推荐一本书 《3D数学基础:图形与游戏开发》


文章目录

* 向量 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_3>
* 数学定义 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_4>
* 向量与标量 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_6>
* 向量的维度 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_8>
* 位置与位移 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_16>
* 向量运算 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_26>
* 负向量 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_28>
* 运算法则: <https://blog.csdn.net/shengpeng3344/article/details/91450197#_31>
* 向量大小 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_36>
* 运算法则 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_38>
* 加法 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_39>
* 点乘 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_43>
* 几何解释 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_53>
* 向量投影 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_61>
* 向量的叉乘 <https://blog.csdn.net/shengpeng3344/article/details/91450197#_64>


<>向量

<>数学定义

对于数学家而言,向量就是一个数字列表,对于程序员而言则是另一种相似的概念-数组

<>向量与标量

数学上区分向量和标量,“速度”和“位移”是向量,而“速率”和“长度”是标量。

<>向量的维度

向量的维度就是向量包含的“数”的数目,有一维、二维、三维、四维向量。下列各图分别表示:



图4的Cw C_w Cw​表示缩放因子,在OpenGL图像渲染中

<>位置与位移

向量没有位置,只有大小和方向。
例如:

*
位移:“向前走三步”,这句话听上去是关于位置的,但其实句子中使用的量表示的是相对位移,而不是绝对位置。这个相对位移由大小(三步)和方向(向前)构成,所以它能用向量表示。
*
速度:“我们以50英里每小时的速度向北行驶”,这句话描述了一个量,它有大小(50英里每小时)和方向(北),但没有具体位置。“50英里每小时的速度向北”能用向量表示。
注意:位移、速度与距离、速率是完全不同的两种定义。位移和速度是向量,包含方向,而距离和速率是标量,不指明任何方向。

所以,记住:上图的向量,只有箭头的长度和方向是有意义的,不包括位置。
<>向量运算



<>负向量

向量变负,将得到一个和原向量大小相等,方向相反的向量


<>运算法则:

-[x,y] = [-x,-y]
-[x,y,z] = [-x,-y,-z]
-[x,y,z,w] = [-x,-y,-z,-w]


<>向量大小



<>运算法则

<>加法


向量a和向量b相加的几何解释为,平移向量,使得向量a的头指向向量b的尾,接着从a的尾向b的头画一个向量。这就是向量加法的“三角形法则”。


<>点乘

a⋅b=axbx+ayby(a和b是2D向量) a\cdot b = a_x b_x + a_y b_y (a和b是2D向量) a⋅b=ax​bx​+ay​b
y​(a和b是2D向量)
a⋅b=axbx+ayby+azbz(a和b是3D向量) a\cdot b = a_x b_x + a_y b_y + a_z b_z(a和b是3D向量) a
⋅b=ax​bx​+ay​by​+az​bz​(a和b是3D向量)
从上述公式中可以看出,点乘满足交换率。
点乘是得到的标量,并满足交换律,所以我们在OpenGL中需要矩阵效果叠加不能使用点乘。

<>几何解释


点乘等于向量大小与向量夹角的cos值的乘积

a⋅b=∣a∣∣b∣cos⁡θ a·b =|a||b|\cos \theta a⋅b=∣a∣∣b∣cosθ

<>向量投影

根据上面取得的夹角,就可以根据点乘计算投影


<>向量的叉乘

叉乘得到的是垂直于原来的两个向量的一个向量,称之为法向量



图中,a,b在一个平面,a×ba \times ba×b指向该平面的正上方,垂直于a和b




通过把平行四边形一段切下来组成正方形计算

如果a、b平行或任意一个为0,则a×b=0 a \times b = 0 a×b=0,所以,叉乘对零向量的定义是:它平行于任意其他向量。
已经证明a×b a \times b a×b
垂直于a、b,但是垂直于a、b有两个方向,如何判断?通过将a的头和b的尾相连,并检查从a到b是顺时针还是逆时针,就能确定法线的方向。
在左手坐标系中,如果a和b呈顺时针,那么法向量指向您,如果a和b呈逆时针,那么法向量远离你。
在右手坐标系中,如果a和b呈逆时针,那么法向量指向你,如果a和b呈顺时针,那么法向量远离你。


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信