OpenGL3D数学

作者: iOS小洁 | 来源:发表于2023-01-04 21:02 被阅读0次

math3d库向量

math3d库包含两个数据类型

  • M3DVector3f 三维向量 (x, y, z)
  • M3DVector4f 四维向量(x, y, z, w)

在典型情况下,w 坐标设为1.0。x,y,z值通过除以w,来进行缩放。⽽除以1.0则本质上不改变x,y,z值。

typedef float M3DVector3f[3];
typedef float M3DVector4f[4];

// 声明⼀个三维向量操作:
M3DVector3f vVector;
// 类似,声明⼀个四维向量的操作:
M3DVector4f vVectro= {0.0f,0.0f,1.0f,1.0f};

// 声明⼀个三维向量顶点数组,例如⽣成⼀个三角形
M3DVector3f vVerts[] = {
    -0.5f, 0.0f, 0.0f,
    0.5f, 0.0f, 0.0f,
    -0.0f, 0.5f, 0.0f,
};

向量

向量大小

标量与向量乘法

标量与向量的除法

标准化向量

向量加减法

向量点乘

向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。

例如:向量a和向量b

  • a=[a1, a2, a3, ...an];
  • b=[b1, b2, b3, ...bn];
  • a和b点乘 = a1b1 + a2b2 + a3b3 + ... + anbn;

几何意义:

点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影

公式:

img

结论:

  • a·b>0 方向基本相同,夹角在0°到90°之间
  • a·b=0 正交,相互垂直
  • a·b<0 方向基本相反,夹角在90°到180°之间
//实现点乘⽅法: 
//⽅法1:返回的是-1,1之间的值。它代表这个2个向量的余弦值。
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v);

//⽅法2:返回2个向量之间的弧度值。
float m3dGetAngleBetweenVector3(const M3DVector3f u,const M3DVector3f v);

向量叉乘

叉乘的运算结果是一个向量而不是一个标量。结果向量与这两个向量组成的坐标平面垂直。

公式:

img img

其中i,j,k

img

根据i、j、k间关系,有:

img

在二维空间中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。

void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u ,const M3DVector3f v);

OpenGL 矩阵

  • typedef float M3DMatrix33f[9];
  • typedef float M3DMatrix44f[16];
image-20220726074901432

对角线元素:行号等于列号的元素

单元矩阵:对角线元素为1,其他元素为0

任何矩阵乘以单元矩阵,结果都是他本身

方阵:行数和列数相同的矩阵

矩阵乘法:标量与矩阵,矩阵与矩阵

  • 当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘
  • 任意矩阵M乘以方阵S,不管从哪边乘,都得到与原矩阵⼤小相同的矩阵。当然,前提是假定乘法有意义。如果S是单位 矩阵,结果就是原矩阵M,即:MI = IM = M
  • 矩阵乘法不满⾜交换律,即:AB != BA
  • 矩阵乘法满⾜结合律,即:(AB)C = A(BC)。假定ABC的维数使得其乘法有意义,要注意如果(AB)C有意义,那么A(BC)就⼀定有意义。
  • 矩阵乘法也满⾜与标量或向量的结合律律,即:(kA)B = k(AB) = A(kB); (vA)B = v(AB);
  • 矩阵积的转置相当于先转置矩阵然后以相反的顺序乘法,即:(AB)T = BT AT

向量与矩阵乘法

相关文章

  • OpenGL3D数学

    math3d库向量 math3d库包含两个数据类型 M3DVector3f 三维向量 (x, y, z) M3D...

  • 数学数学数学

    前几天看了电影“博士的爱情方程式”,当下网购了原作,昨天到的今天便看完了。 纸质版和电影还是不一样,有各自的特质,...

  • opengl3D开发三部曲附下载

    OpenGL基础知识.pdf: opengl基础指导教程,从最基本的画点画面开始认识3D开发 OpenGL编程精粹...

  • 数学数学,还是数学

    今天还是聊聊小学数学吧。 前些天看了一篇文章,讨论中国学生的数学成绩和比赛成绩都名列世界前茅,但为什么在数学的基础...

  • 数学数学!

    与柚子生物数学相伴 说好的下课回家后整理数学笔记,把课上讲过的再写一遍,一看到手机我就我就.....就..... ...

  • 数学!数学!

    数学,原本是很实实在在的学科,然而经历了多年的发展却已经变得越来越抽象,结果就是大多数人很难对数学的了解上升的更高...

  • 数学,数学

    今天下午监考初三数学,据说题比较难,考场里没有一个学生能把最后的大题做完。而我是连题目都看不懂了。 从小我就不是个...

  • 数学,数学,真难学?数学,数学,不难学!

    女儿最不理想的科目就是数学,每次数学都是拉分王,即使语文,英语都考第一,但因为数学的“不争气”,总分成绩也很少会在...

  • 数学啊数学……

    以下歪歪扭扭的数字是龙子同学的杰作,特别佩服他能把数字8写成各种奇怪的形状,虎妈看他做这些题写这些数字时,真是又好...

  • 数学啊数学

    我们常说数学来源于生活,我们老师也喜欢,用生活的事物、生活的情景引入,尤其是概念课,象数的认识以及图形的认识等等,...

网友评论

    本文标题:OpenGL3D数学

    本文链接:https://www.haomeiwen.com/subject/vvglcdtx.html