Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 3by3矩阵乘法_C++_Class_Matrix_Multiplication - Fatal编程技术网

C++ 3by3矩阵乘法

C++ 3by3矩阵乘法,c++,class,matrix,multiplication,C++,Class,Matrix,Multiplication,我有一个3by3矩阵类不能正常工作。当我使用第三个实例来存储答案并将另外两个实例相乘时,它可以正常工作。但当我试着去做时,它会给我奇怪的数字 以下是常规*和*=函数: threeby3matrix operator*(threeby3matrix& multiplier) { threeby3matrix m1; m1[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * m

我有一个3by3矩阵类不能正常工作。当我使用第三个实例来存储答案并将另外两个实例相乘时,它可以正常工作。但当我试着去做时,它会给我奇怪的数字

以下是常规*和*=函数:

 threeby3matrix operator*(threeby3matrix& multiplier)
  {
    threeby3matrix m1;
    m1[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    m1[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    m1[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    return m1;
  }
  threeby3matrix& operator*=(threeby3matrix& multiplier)
  {
    matrix[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    matrix[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    matrix[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    return *this;
  }
由于某些原因,我得到了[18][18][18][108][228][18][108][708][1638]


当他们都应该是18岁的时候。我试着在括号里乱搞,但似乎什么都不管用。

在使用矩阵进行计算时,您正在修改矩阵

试着这样做:

threeby3matrix& operator*=(threeby3matrix& multiplier)
{
    std::swap(*this, operator*(multiplier));
    return *this;
}

还有,我忘了提一下,我用了一个一维动态数组来存储二维数组。你还没有学到关于“for”循环的任何东西吗?@SamVarshavchik-我想他们想把输入提高到scratch哦,哇,现在我看到了,这似乎是一个愚蠢的错误,谢谢。我们学习了循环,它看起来不太实用,因为它需要多个循环和变量,所以我只是把它打印出来