无法正确进行矩阵乘法

时间:2017-05-29 14:00:36

标签: c++ matrix multiplication

我一直在尝试在C ++上使用同构转换但我不能让矩阵乘法起作用。我在代码中做错了吗?

我检查了手工做它并没有看错。我错过了什么吗?

#include "stdafx.h"
using namespace std;

float point[3][1];
float point_trans[3][1] = {0,0,0};
float rot[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
float d[3][1] = {0,0,0};
float x,y,z;

float transform (float x1, float y1, float z1)
{
    point[0][0] = x1; 
    point[1][0] = y1;
    point[2][0] = z1;

    for(int i=0; i<3; ++i)
    {
        for(int j=0; j<1; ++j)
        {
            for(int k=0; k<3; ++k)
            {
                point_trans[i][j]+=rot[i][k]*point[k][j];
            }
        }
    }

    x1 = point_trans[0][0] + d[0][0];
    y1 = point_trans[1][0] + d[1][0];
    z1 = point_trans[2][0] + d[2][0];

    return(x1,y1,z1);
}

int main()
{
    x = 6; y = 7; z = 8;

for(int i=0;i<3;i++)
{
    for(int j=0;j<3;j++)
    {
        cout << rot[i][j] << " ";
    }
    cout << endl;
}


    (x,y,z) = transform(x,y,z);
    cout << "X:" << x << " " << "Y:"<<y<<" "<<"Z:"<<z<<endl;
    system("pause");
    return 0;

}

1 个答案:

答案 0 :(得分:0)

您正在用c ++编写python代码。

def transform():
    return (6, 7, 8)

x, y, z = transform()
print (x, y, z)

括号在python中创建复合类型(元组)的实例。输出将是6,7,8,因为它返回一个结果,但结果是三部分元组,并且x,y,z =(6,7,8)的赋值将元组的每个部分分配给不同的变量,因为python如何使用元组进行赋值。

当您编写(6,7,8)时,c ++中实际发生的是逗号运算符,它会计算第一项并丢弃结果。 https://en.wikipedia.org/wiki/Comma_operator括号只是组操作符,在此处没有效果。因为评估像“x”这样的单个浮点值没有副作用,所以它没有做任何事情,而c ++代码中的“return(x,y,z)”与写“return z”相同。

因为代码是c ++,你需要做与python代码实际相同的事情(返回一个值有三个部分),但你需要在c ++中完成它,所以继续并声明一个类型。这是关键区别之一 - 您必须告诉编译器类型是什么。当然有很多方法可以做到,但你不能只使用python语法。

struct coordinate { float x, y, z; };

coordinate transform(float x1, float y1, float z1)
{
    // code
    return coordinate{ x1, y1, z1 };
}

// in main
coordinate result = transform(x, y, z);
cout << "X:" << result.x << " " << "Y:" << result.y << " " << "Z:" << result.z << endl;