C ++两个矩阵的乘法

时间:2014-04-17 15:27:09

标签: 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循环(x = 0)使他的第一轮ab为0.这是合乎逻辑的 - &gt;第一行*第一列

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有关,但我不明白。

1 个答案:

答案 0 :(得分:1)

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

因此(x/4)*4会使b上升4秒。 b将是0,0,0,0,4,4,4,4,8,8,8,8 ......