C++ 两个矩阵的乘法

标签 c++ arrays opengl

大家好,我看不出 [4x4] 矩阵乘法的逻辑:

void matrix::multiplicate( GLdouble nm[ 16 ] )
{
    char x, a, b;
    GLdouble tm[ 16 ];

    for( x=0 ; x<16 ; x++ )
    {
        a = x % 4;  
        b = (x / 4) * 4;

        tm[ x ] = nm[ a    ] * mx[ b   ] +
              nm[ a+4  ] * mx[ b+1 ] +              
              nm[ a+8  ] * mx[ b+2 ] +
              nm[ a+12 ] * mx[ b+3 ];
    }

    for( x=0 ; x<16 ; x++ ) 
        mx[ x ] = tm[ x ];
 }

当 for-loop(x = 0) 进行第一轮时 ab 为 0。这是合乎逻辑的 -> 第一行 * 第一列

tm[ 0 ] =     nm[ 0  ] * mx[ 0 ] +
              nm[ 4  ] * mx[ 1 ] +              
              nm[ 8  ] * mx[ 2 ] +
              nm[ 12 ] * mx[ 3 ];

但是现在 x = 1:第二行 * 第一列

tm[ 1 ] =     nm[  1 ] * mx[ 1 ] +
              nm[  5 ] * mx[ 2 ] +              
              nm[  9 ] * mx[ 3 ] +
              nm[ 13 ] * mx[ 4 ];

mx[4] 在第二列....它与 b 有关,但我不明白。

最佳答案

因为b是整数,所以b/4是整数除法,当x=1时,b/40,所以 b=0

所以 (x/4)*4 使 b 增加 4s。 b 将是 0,0,0,0,4,4,4,4,8,8,8,8...

关于C++ 两个矩阵的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137178/

相关文章:

c++ - 通过 qDebug 打印 qByteArray

c++ - 像素着色器总是返回白色

c++ - decltype(*&fun) 很奇怪?

c - 类型、表达式和数组维度

c++ - 设置基本着色器程序 - GLchar 和 file_contents 未定义?

c++ - OpenGL 使用 glNewList 和 glDrawElements

c++ - 编译一个简单的 Gsoap 服务

在 C 中更改 char[]

java - 流并行加载到着色器存储缓冲区对象

python - 初始化转置 numpy 数组