我有一个无法正常工作的 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;
}
关于c++ - 3×3矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367856/