大家好,我看不到[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时,这是合乎逻辑的->第一行*第一列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/4
是0
,所以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/