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