C++ C++;两个矩阵的乘法
大家好,我看不到[4x4]矩阵乘法的逻辑:C++ C++;两个矩阵的乘法,c++,arrays,opengl,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 ] +
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 ];
}
但是现在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…最好使用调试器,逐行检查程序并观察值的变化,这应该让您了解实际发生的情况。使用嵌套循环,每次重新计算索引不是更干净吗?x==1
是单元格[0,1]
:第一行,第二列。为什么要使用char
作为索引int
会自然得多。@JamesKanze或size\u t
,这对IMHO来说会更自然。这当然是他想要的(尽管b=x-a
同样有效,而且可能会快一点)。
tm[ 1 ] = nm[ 1 ] * mx[ 1 ] +
nm[ 5 ] * mx[ 2 ] +
nm[ 9 ] * mx[ 3 ] +
nm[ 13 ] * mx[ 4 ];