频道栏目
读书频道 > 软件开发 > C# > 精通C#游戏编程
8.5.3 矩阵乘法和矩阵与向量的乘法
2012-08-01 16:47:52     我来说两句
收藏   我要投稿

本文所属图书 > 精通C#游戏编程

本书通过引导读者创建一个基本的游戏,展示了如何使用c#和OpenGL一步步地开发出简单、整洁而可靠的代码。C#是一种高级编程语言,而OpenGL是业界显示图形最常用的方法。本书概述了创建优秀游戏项目时采用的方法和...  立即去当当网订购

Matrix类最重要的方法是其乘法方法。乘法用于组合矩阵和顶点位置的变化。只有当第一个矩阵的宽度和第二个矩阵的高度相同时,才可以执行矩阵乘法。矩阵乘法和矩阵与向量的乘法是使用相同的算法执行的。

乘法的定义如下。

 

C是乘法的结果,i是矩阵A中的行数,k是矩阵B中的列数。j是i和k的可能的和的数量。在矩阵乘法中,相乘矩阵原来的形状不同,结果矩阵的形状也会不同。同样,不要因为这些数学公式看上去让人生畏而感到担心,因为知道如何和何时使用矩阵才是这里最重要的。

在我们的矩阵中,如果包含了最后一列[0,0,0,1],那么它的宽度与高度相等。因此,根据矩阵乘法的定义,编写矩阵乘法的代码如下所示。

public static Matrix operator *(Matrix mA, Matrix mB)

{

Matrix result = new Matrix();

 

result._m11 = mA._m11 * mB._m11 + mA._m12 * mB._m21 + mA._m13 * mB._m31;

result._m12 = mA._m11 * mB._m12 + mA._m12 * mB._m22 + mA._m13 * mB._m32;

result._m13 = mA._m11 * mB._m13 + mA._m12 * mB._m23 + mA._m13 * mB._m33;

 

result._m21 = mA._m21 * mB._m11 + mA._m22 * mB._m21 + mA._m23 * mB._m31;

result._m22 = mA._m21 * mB._m12 + mA._m22 * mB._m22 + mA._m23 * mB._m32;

result._m23 = mA._m21 * mB._m13 + mA._m22 * mB._m23 + mA._m23 * mB._m33;

 

result._m31 = mA._m31 * mB._m11 + mA._m32 * mB._m21 + mA._m33 * mB._m31;

result._m32 = mA._m31 * mB._m12 + mA._m32 * mB._m22 + mA._m33 * mB._m32;

result._m33 = mA._m31 * mB._m13 + mA._m32 * mB._m23 + mA._m33 * mB._m33;

 

result._m41 = mA._m41 * mB._m11 + mA._m42 * mB._m21 + mA._m43 * mA._m31 +

mB._m41;

result._m42 = mA._m41 * mB._m12 + mA._m42 * mB._m22 + mA._m43 * mB._m32 +

mB._m42;

result._m43 = mA._m41 * mB._m13 + mA._m42 * mB._m23 + mA._m43 * mB._m33 +

mB._m43;

 

return result;

}

向量与矩阵的乘法类似。

public static Vector operator *(Vector v, Matrix m)

{

 

return new Vector(v.X * m._m11 + v.Y * m._m21 + v.Z * m._m31 + m._m41,

v.X * m._m12 + v.Y * m._m22 + v.Z * m._m32 + m._m42,

v.X * m._m13 + v.Y * m._m23 + v.Z * m._m33 + m._m43);

}


您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:8.5.2 单位矩阵
下一篇:8.5.4 平移和缩放
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站