从零开始图形学 | 线性代数的中的点乘和叉乘

如题所述

第1个回答  2022-06-08
点乘可以用来计算两个单位向量的夹角,两个模为1向量的点积,获得的值即为 cosθ。如下

这个夹角值可以用来
1.描述两个向量是否足够接近;
2.解构向量(通过一个向量在另一个向量的投影分量);
3.判断是正向还是背向;

应用栗子:
金属反射的Specular影响阈值,当视线在光源反射的一定范围内就可以观察到,这个范围就是反射光线和视线的夹角。

点乘在笛卡尔坐标系下的计算方式

叉乘计算是遵循右手螺旋定则的,在OpenGL里也是右手,然而在DirectX大部分是都是左手,这也解释了为什么Substance要经常翻转法线。

需要说明的是,叉乘返回的结果是向量,所以当向量叉乘自己时,虽然sin0 = 0, 返回的依然是0向量。
两个向量的叉积可以用来
1.判断向量的左右方向:正交坐标系,如果a叉乘b和 y是同向,则a在b左边
2.判断点在面的内外:假如任{意点P和某顶点组成的向量}叉乘 {顺时针 或者 逆时针 顶点组成的各个向量},返回的结果如果显示P都在三个向量的同一侧,则P点在面内。这个可以延伸到碰撞检测或者命中算法,以及三角形光栅化的理论基础,通过判断像素是否在三角形的内部,从而得出三角形覆盖了哪些像素。

注:3行2列和2行3列是可以运算的, 但是3行2列和3行4列就不行了。
某行某列矩阵运算的结果就是 {第一个矩阵的行} 点乘 {第二个矩阵的列},例如
第一个?处在1行2列,= 1x6+3x7 = 27
第二个?处在3行4列,= 0x4+4x3 = 12

这里可以用矩阵的方式来描述点乘和叉乘

当两个矩阵相乘结果是单位矩阵(对角阵)时,就称一个矩阵为另一个矩阵的逆
相似回答