向量与矩阵的相乘

在学习计算机图形学的时候,最常遇到的就是矩阵的乘法了,下面我们就简单的介绍下,使用程序如何编写两个矩阵的相乘呢?其实这个问题,大一的孩子都会写的,不是很难的,但是呢,为了构建一个完整的学习过程,还是记录一下基础知识。

1、向量乘以矩阵
这里写图片描述

如上图所示,是用向量的各个元素,乘以矩阵的对应列的四个分量,得到最终的向量,程序如下:

public Vector4 Mul(Vector4 v)
{
            Vector4 newV = new Vector4();
            newV.x = v.x * this[1, 1] + v.y * this[2, 1] + v.z * this[3, 1] + v.w * this[4, 1];
            newV.y = v.x * this[1, 2] + v.y * this[2, 2] + v.z * this[3, 2] + v.w * this[4, 2];
            newV.z = v.x * this[1, 3] + v.y * this[2, 3] + v.z * this[3, 3] + v.w * this[4, 3];
            newV.w = v.x * this[1, 4] + v.y * this[2, 4] + v.z * this[3, 4] + v.w * this[4, 4];
            return newV;
}

2、矩阵乘以矩阵
矩阵的相乘,以4*4矩阵为例子,为什么选择4*4呢,因为3D图形学中最常用到的就是4阶矩阵。
这里写图片描述
所以又所以,我们苦思冥想,怎么用程序实现呢?哈哈,不要捉急,知识一方面是创新,但也有一方面是cp。cp之后,理解就好。
ok,程序如下:

public Matrix4x4 Mul(Matrix4x4 m)
{
            Matrix4x4 newM = new Matrix4x4();
            for(int i=1;i<=4;++i)
            {
                for(int j=1;j<=4;++j)
                {
                    for(int k=1;k<=4;++k)
                    {
                        newM[i, j] += this[i, k] * m[k, j]; 
                    }
                }
            }
            return newM;
}

你可能感兴趣的:(cg)