我一直在尝试在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;
}
答案 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;