线性代数学习记录 前言为什么要学习线性代数作为一名游戏开发相关的程序只要学习图形学相关的知识就绕不开线性代数而很多人要么没有真的去学习过线性代数或者学习了也忘了导致一些时候遇到需要用到线性代数就开始薅头发。线性代数有什么用二维和三维几何变换线性代数提供了矩阵和向量的运算工具可以用于描述和实现图形的平移、旋转、缩放等变换操作。图形投影和视点变换线性代数可以用于定义和计算透视投影和平行投影以及实现不同视点下的物体变换。计算机图形的建模和渲染线性代数可以用于描述和计算三维图形的顶点、法线和纹理坐标以及进行光照计算、阴影生成和纹理映射等图像合成和渲染操作。三维图形的碰撞检测和物体运动线性代数可以用于描述和计算三维物体的位置、速度和加速度以及进行碰撞检测、碰撞响应和物体运动模拟等操作。颜色空间的表示和处理线性代数可以用于描述和计算颜色的表示和处理包括颜色空间的转换、颜色的混合和纹理的着色等操作。个人理解(仅供参考)个人比较讨厌的是很多课程都只对规则进行讲解而不对目的和过程进行解释我在下面试图做出推测线性代数的简单理解1.线性代数最开始被用来解决线性方程组的问题是线性方程组的一种简化写法简化写法的同时计算的方式自然也就改变了若x,y为标量一元例如3x则可以表示一条轴上任意一点二元例如3x 4y则可以表示一条轴上的任意一点但是由两个未知标量组成…那如果x, y是二维向量的呢一元: 例如3x则可以表示平面上任意一条向量二元例如3x 4y则可以表示平面上的任意一条向量但是由两个未知向量组成…同样x,y除了可以为向量还可以继续往上扩充例如一个平面(张量)x [(n1, n2), (n3, n4)]一元: 例如3x则可以表示空间中任意一个平面二元例如3x 4y则可以表示空间中任意一个平面但是由两个未知张量组成矩阵的表示以前都接触过方程组如3x4y04x5y1可以求得x, y 的解。这里是给定了每个方程的结果可以发现方程的结果确定可以确定元的维度。也就可以求出未知数的解。但是在线性代数中我们偏向于研究方程组的性质和变换并不注重基(未知数)的结果。以3x 4y为例我们只知道他是由3个x 和4个y基组成并不关心基的值也不注重其是向量标量还是张量。无论其是什么都只要在最后代入即可并不会影响我们的变换只研究性质所以我们可以将方程组写成f(x,y)3x4yf(x,y)4x5y既然x,y 不确定那就不需要那就提取出来。分成两个部分[x,y][34][4,5]为了使其能够还原我们定义了运算规则于是就有了矩阵乘法[x,y][3,4][3x4y,4x5y][4,5]也就是第一行乘第一列作为【11】位置的元素而且从数形合一的角度也很好理解就是将线性变化的结果放到对应的基空间(以x,y为基的空间)而乘以一个新的向量[2,1][3,4][4,5]就是将[3,4][4,5]这个矩阵所组成的平面(两个向量组成平面)所有点的x(第一个基)拉长2倍。而y第二个基不变。从而实现变换。通过以上的内容可以试图理解下矩阵基本的几个运算和性质矩阵运算1.矩阵加减法各个元素相加[a,b][a1,b1][aa1,bb1][c,d][c1,d1][cc1,dd1]解释矩阵可以理解为是基的倍量系数那么矩阵加减法就是将这些矩阵各个基的倍数加减,从而改变基变换的幅度2.数乘解释相当于将所有基全都扩大一定倍数即所在空间的积(面积体积等)扩大k^n倍3.乘法解释前面已经讲过根据前面的推理也可以解释为什么矩阵乘法不符合交换律而加法符合因为剔除基的时候还原回去的方式是固定的。4.转置解释其它基在此基上的投影(分量)与此基在其他基上的投影(分量)值互换5.逆矩阵与自己相乘为结果单位矩阵的矩阵解释一个与矩阵相乘可以使矩阵变为单位矩阵的矩阵。如果矩阵为一个线性空间的变换那逆矩阵就是将这种线性变换还原6.矩阵的秩解释既可以看成有效的方程组个数也可以看成是每个方程组必要元的个数。线性方程组矩阵的行列式解释行列式中的行或列向量所构成的超平行多面体的有向面积或有向体积作用1.判断矩阵是否可逆2.判断线性方程组是否有唯一的解逆矩阵1.待定系数法2.伴随矩阵求逆矩阵3.初等变换求逆矩阵不过多解释可以自行了解需要用就套公式克拉默法则用于解线性方程组的法则步骤1.验证矩阵行列式不为零这一步确保解可以被解出因为矩阵的行列式不为零代表矩阵是满秩矩阵也就是每一个方程组都有效线性无关也就可以求出解。三个未知数一定要三个有效方程组才能求出2.求出D1,D2,D3等。D1D2D3等于拿方程组的目标向量(号右边的向量)最后根据D1,D2,D3求出对应的未知数值线性变换1.伸缩2.翻折3.投影4.镜像5.旋转空间几何点的表示方法一个点可以通过坐标表示。在二维坐标系中一个点可以用两个实数 (x, y) 表示。在三维坐标系中一个点可以用三个实数 (x, y, z) 表示。向量的表示方法一个向量可以通过起点和终点的坐标表示。在二维坐标系中一个向量可以用两个实数 (x, y) 表示表示从原点到终点的位移向量。在三维坐标系中一个向量可以用三个实数 (x, y, z) 表示。平面的表示方法一个平面可以用点和法向量表示。一个平面上任意一点的坐标可以通过参数方程表示。常用的表示方法包括点法式方程、一般式方程和参数式方程。向量的运算向量可以进行加法和数乘运算。加法两个向量相加得到一个新的向量。向量的加法满足交换律和结合律。数乘一个向量与一个实数相乘得到一个新的向量。数乘可以改变向量的长度和方向。向量的点积和叉积点积点积是两个向量之间的运算结果是一个实数。点积的结果等于两个向量的模的乘积与它们夹角的余弦值。利用向量点乘的几何意义可以比较简单求解以下几个问题求线段AP在线段AB上的投影长度求点P在线段AB上的投影点的坐标判断点P的投影点是否在线段AB内求∠PAB的角度值判断∠PAB是锐角、直角还是钝角。叉积叉积是两个向量之间的运算结果是一个新的向量。叉积的结果是垂直于这两个向量的一个向量其大小等于两个向量的模的乘积与它们夹角的正弦值。可以用向量的叉乘来求解以下问题求向量AP和AB组成的平行四边形的面积若有另外一点Q判断向量PQ与AB是否平行判断点P在向量AB的左侧还是右侧。向量a和向量b的叉积是一个向量而不是一个标量。向量a和向量b的叉积是一个法向量- 该向量垂直于向量a和b构成的平面遵循右手定则。即将右手食指指向a的方向中指指向b的方向则此时拇指的方向即为法向量的方向。这一定则意味着叉积满足反交换律a x b - b x a。- 该向量的模长是向量a和b组成的平行四边形的面积。平面的运算平面与向量的关系平面上的每个点都可以通过位于原点的一个向量来表示。向量与平面的关系可以通过点积和叉积来判断。点积设有向量 A(a1, a2) 和向量 B(b1, b2)它们的点积为 A·B a1b1 a2b2。我们可以通过计算向量 A 和向量 OP 的点积来判断点 P 是否在平面上。如果 A·OP 0即点 P 在平面上与向量 A 垂直表示点 P 在与向量 A 垂直的平面上。如果 A·OP 0即点 P 在平面上与向量 A 成锐角表示点 P 在与向量 A 构成锐角的平面上。如果 A·OP 0即点 P 在平面上与向量 A 成钝角表示点 P 在与向量 A 构成钝角的平面上。叉积设有向量 A(a1, a2) 和向量 B(b1, b2)它们的叉积为 AxB a1b2 - a2b1。我们可以通过计算向量 A 和向量 OP 的叉积来判断点 P 是否在平面上。如果 AxB 0即点 P 在平面上与向量 A 平行表示点 P 在与向量 A 平行的平面上。如果 AxB ≠ 0即点 P 在平面上与向量 A 不平行即存在垂直于向量 A 的向量表示点 P 不在与向量 A 平行的平面上。平面间的运算两个平面可以进行相交、平行或重合等运算。坐标系直角坐标系笛卡尔坐标系转极坐标系坐标点(x, y)转化为(r, θ)其中r为点到原点的距离θ为点与x轴的夹角。r √(x^2 y^2)θ atan2(y, x)极坐标系转直角坐标系坐标点(r, θ)转化为(x, y)其中x r * cos(θ)y r * sin(θ)。直角坐标系转球坐标系坐标点(x, y, z)转化为(r, θ, φ)其中r为点到原点的距离θ为点与z轴的夹角φ为点在x-y平面上的投影与x轴的夹角。r √(x^2 y^2 z^2)θ acos(z/r)φ atan2(y, x)球坐标系转直角坐标系坐标点(r, θ, φ)转化为(x, y, z)其中x r * sin(θ) * cos(φ)y r * sin(θ) * sin(φ)z r * cos(θ)。线性相关和线性无关线性相关性若存在不全为零的常数c1,c2,…,cn使得向量组中的向量可以表示为它们的线性组合则这个向量组是线性相关的。简而言之向量组中至少存在一组线性关系其中某个向量可以表示为其他向量的线性组合。线性无关性若向量组中的任意向量不能由其他向量的线性组合表示则这个向量组是线性无关的。也就是说向量组中不存在非平凡的线性关系每个向量都是独立的。常见的表达形式为线性相关性c1v1 c2v2 … cnvn 0其中至少存在一个ci不为零。线性无关性c1v1 c2v2 … cnvn 0只有当所有的ci都为零时等式成立。方法行列式判断将向量组构成一个矩阵A即A [v1, v2, …, vn]将其行列式计算为|A|。如果|A| 0则向量组是线性相关的。如果|A| ≠ 0则向量组是线性无关的。特征值和特征向量特征向量对于一个n维列向量v和一个n×n的矩阵A如果存在一个非零向量v使得Avλv其中λ是一个标量那么v就被称为矩阵A的一个特征向量。特征值对于一个n维列向量v和一个n×n的矩阵A如果存在一个非零向量v和一个标量λ使得Avλv那么λ就被称为矩阵A的一个特征值。特征向量可以看作是在矩阵A的线性变换下不变的方向而特征值描述了该方向上的变换比例。计算特征值和特征向量的步骤如下求解矩阵A减去λII为单位矩阵的行列式为零的特征方程即|A-λI|0。解特征方程得到λ的值这些值就是矩阵A的特征值。将每个特征值代入(A-λI)x0求解得到关于特征值的特征向量。特征值分解只有有特征值的矩阵才能进行特征值分解奇异值分解所有实数矩阵都能进行奇异值分解推导过程根据几何特性总有一组基在线性变换之前和之后都是正交的从而构成奇异值求解的公式然后是推导奇异值分解的三个构成矩阵的值LU分解可以看 https://zhuanlan.zhihu.com/p/363948873仿射变换线性插值和曲线插值线性插值单线性插值单线性插值是在一个方向上进行线性插值双线性插值双线性插值是有两个变量的插值函数的单线性插值扩展,器核心思想是在两个方向上分别进行一次线性插值.已知 y 求 x 的过程与以上过程相同只是 x 与 y 要进行交换.类似的还有三线性插值就是在三个方向上分别插值曲线插值目的想得到一个式子来直接模拟曲线这样就不需要构造整个矩阵或方程组这里采用了一个l(x)的函数作为系数使得与自己相同下标的x带入就为1其他就为0就可以保证xn带入的结果只保留yn的项l如何求解拉格朗日插值多项式作用根据一组点得到一组多项式使得每一个多项式只有在带入自己对应的点时值为1带入这一组点中其他任意点均为0Newton多项式插值目的根据前面给出的通用多项式形式我们知道需要一个次数递增的多项式来模拟一组点的插值多项式而牛顿多项式刚好符合要求且由于差商的性质刚好满足x0处得到y0,x1处得到y1的条件直接得到需要的多项式牛顿多项式给出一组点根据递归求这些点的差商得到一个次数递增的多项式满足x0处等于y0,x1处等于y0k(x1-x0) y1,…的性质投影和透视标准视体准视体中的坐标就是标准设备坐标其概念很明确清晰简而言之就是将 x,y,z坐标都划分在 【-11】的区间范围内框出一个直觉看起来就很“标准”的立方体空间。正射投影正射投影分为缩放和平移两步其中正射投影视体的上下左右平面范围分别用 r(right), t(top),n(near), f(far)表示。缩放将x,y,z长度差不超过2 所以每个点x,y,z都乘以2/长度平移缩放后将所有点的x,y,z都平移到[-1,1]之间最终矩阵透视投影对于透视矩阵一般没有给出推导形式这里放一下可能的推理需要对平面根据z进行压缩其次坐标可以看出透视除法的出现是因为我们为了对 x和 y 坐标进行压缩而使用齐次坐标进行构造透视投影矩阵并需要对最后的结果进行齐次化所诞生的。我们可以发现经过与透视投影矩阵相乘的视体中的某一个点x,y在缩小的同时保证了zn时z分量等于zzf时z分量结果还是等于z即在 x,y压缩为 nx/z, ny/z时保留了近平面和远平面的 z分量映射压缩矩阵个人理解经过与透视投影矩阵相乘的视体中的某一个点[x, y, z, 1]其缩放矩阵需要使其x, y分量压缩成nx/z, ny/z所以与z/n呈反比。[n/z, n/z, ?, 1]考虑到最后要做齐次变换所以将z放到w分量上[1,1,?,z/n]。然后z分量需要满足两个条件zn时z分量等于zzf时z分量结果还是等于z所以z可以写成nf - n*f/z, 同时为了让z不受到齐次变换的影响需要乘上z/n结果可以写成【x, y, z(nf)/n - f, z/n】反向推理成矩阵形式就是2.将压缩矩阵左乘正射投影矩阵得到