大家好我没看到[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)使他的第一轮a
和b
为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
有关,但我不明白。
答案 0 :(得分:1)
这是因为b
是一个整数,所以b/4
是整数除法,当x=1
时,b/4
是0
,所以b=0
因此(x/4)*4
会使b
上升4秒。 b
将是0,0,0,0,4,4,4,4,8,8,8,8 ......