向量点乘叉乘、矩阵、OpenGL变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向量点乘叉乘、矩阵、OpenGL变化相关的知识,希望对你有一定的参考价值。

参考技术A 向量:向量就是在3D笛卡尔坐标中的一个顶点。单位向量就是长度为1的向量、

标量:标量是一个只有数值大小 没有方向,部分有征服之分。通俗来说标量只有大小没有方向的量。

向量和标量的区别就是 向量是有方向的。标量是没有方向的。

向量的点乘叉乘:点乘又叫向量的内积,叉乘又叫向量的外积。点乘计算得到的结果是一个标量;叉乘得到的结果是一个垂直于原向量构成平面的向量。

点乘:只能存在于2个向量之间的相乘。2个三维单元向量 之间进行点乘得到的是一个标量。 这个标量就表示为这两个向量之间的夹角。在我们开发中我们不需要进行向量之间的相乘。我们只需要去调用math3D库里面提供的点乘的API就可以了。方法有 1.float m3ddDotProduct3(const M3DVector3f u, const M3DVector3f v),这个方法我们得到的是两个向量点乘的结果。如果我们需要获取两个向量之间的角度。还需要对获得的数据进行转化。当然 API还提供了另外一个方法 可以直接获取到两个向量夹角的弧度方法2. float m3dGetAngleBetweenVector3(const M3DVector3f u , const M3DVector3d v),用这个方法我们可以直接获取到两个向量夹角的弧度。

叉乘:向量的叉乘获得到是另外一个新的向量。而这个向量是垂直于原来2个向量定义的平面垂直。叉乘和点乘不同。可以使用普通的向量相乘。如图所示

当然 叉乘API也提供了相应的方法 void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u,const M3DVector3f v);

矩阵:在空间中有一个点。使用xyz来描述它。如果我们要对这个点进行移动的,我们要知道这个点新的位置。那么我们就需要通过矩阵计算来获取新的位置。矩阵不仅仅3*3或者是4*4 的这种,如果这个矩阵 只有一行或者只有一列 也可以成为矩阵。我们也可以叫他为向量。

矩阵的叉乘:矩阵的叉乘是有一个规则。这个规则定义了什么样的2个矩阵可以进行叉乘。什么样2个矩阵不能进行叉乘。如图所示:下面的图片中有框框标记的数字如果相等那么这个两个矩阵就可以相乘。如果不相等那么这两个矩阵就不能相乘。

在我们OPenGL的角度里。因为在OPenGL的约定里更多的是倾向使用一维数组。这样的原因是:OPenGL使用的是Column-Major(以列为主)矩阵排序的约定,所以在我们获取变化顶点向量的时候 使用的是矩阵左乘。

OPenGL的几种变换:

1.视图变换,即指定观察者的位置。视图变换是我们再应用场景中使用的第一种变化。简单来说 就是我们再观察一个物体的时候首先要确定观察的角度和观察的位置。只有先定义了观察者的位置 我们再对物体进行移动的时候才能观察到。

2.模型变换,就是用来操作物体通过某一种规律将物体移动到某一个位置,来进行旋转 缩放 平移,

3. 投影变换:分为正投影和透视投影。我们可以通过下面的图来感受一下这两种投影的区别:

数学 二维向量(加法减法模点乘叉乘)




二维向量加法


二维向量减法


二维向量的模



点乘




叉乘


以上是关于向量点乘叉乘、矩阵、OpenGL变化的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB从入门到精通-向量运算点乘叉乘和卷积

UnityUnity 几何知识弧度三角函数向量运算点乘叉乘

向量点乘叉乘推导公式

我的OpenGL学习进阶之旅向量点乘和叉乘的几何意义

我的OpenGL学习进阶之旅向量点乘和叉乘的几何意义

初识OpenGL (-)数学基础