C++ C++;两个矩阵的乘法

C++ C++;两个矩阵的乘法,c++,arrays,opengl,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 ] +

大家好,我看不到[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 ];
 }
但是现在
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/4
0
,所以
b=0


所以
(x/4)*4
使
b
上升4s<代码>b将是0,0,0,0,4,4,4,4,8,8,8,8…

最好使用调试器,逐行检查程序并观察值的变化,这应该让您了解实际发生的情况。使用嵌套循环,每次重新计算索引不是更干净吗?
x==1
是单元格
[0,1]
:第一行,第二列。为什么要使用
char
作为索引
int
会自然得多。@JamesKanze或
size\u t
,这对IMHO来说会更自然。这当然是他想要的(尽管
b=x-a
同样有效,而且可能会快一点)。
tm[ 1 ] =     nm[  1 ] * mx[ 1 ] +
              nm[  5 ] * mx[ 2 ] +              
              nm[  9 ] * mx[ 3 ] +
              nm[ 13 ] * mx[ 4 ];