大家好,我看不到[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循环(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++ - 两个矩阵的C++乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23137178/

10-13 08:22