目前在c ++的计算类项目中苦苦挣扎。被要求将3d空间中的点相对于3轴旋转3个角度。
感觉我有点接近所需的所有部分只是努力将它们组合在一起,讲解笔记在乘法矩阵上有点模糊:(。任何帮助都会受到赞赏。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
std::cout << "Enter a number for x";
int x;
std::cin >> x;
std::cout << "Enter a number for y";
int y;
std::cin >> y;
std::cout << "Enter a number for z";
int z;
std::cin >> z;
std::cout << "Enter value for Theta";
int theta;
std::cin >> theta;
std::cout << "Enter value for Beta";
int beta;
std::cin >> beta;
std::cout << "Enter value for Gamma";
int gamma;
std::cin >> gamma;
//function allows the insertion of xyz and the three angles
{void RTheta(const double& theta, double array[3][3]);
int array =
{
{cos(theta), sin(theta), 0}, //the matrice for theta values
{sin(theta), cos(theta), 0},
{0,0,1}
};
std::cout << RTheta; //outputs value for theta
}
{
void RBeta(const double& beta, double array[3][3]);
int array =
{
{cos(beta), 0, -sin(beta)}, //the matrice for beta values
{0, 1, 0}, //outputs values for beta
{sin(beta), 0, cos(beta)}
};
std::cout << RBeta;
}
{
void RGamma(const double& gamma, double array[3][3]);
int array =
{
{1,0,0}, //the matrice for gamma
{0,cos(gamma), sin(gamma)}, //outputs values for gamma
{0, -sin(gamma), cos(gamma)}
};
std::cout << RGamma;
}
return 0;
}
这个问题是否有帮助:i.imgur.com/eN5RqEe.png
答案 0 :(得分:1)
您需要从抽象的角度开始思考,而不是迷失在细节中。您需要抽象Point
和Transform
并创建适用于这些抽象的函数。
如果您正在使用2D点,请使用:
struct Point
{
double x;
double y;
};
如果您需要使用3D点,请使用:
struct Point
{
double x;
double y;
double z;
};
如果您只对旋转变换感兴趣,可以使用以下内容进行2D变换:
struct Transform
{
double matrix[2][2];
};
对于3D变换,您可以使用:
struct Transform
{
double matrix[3][3];
};
然后添加函数来构造点,转换并对它们执行操作。 E.g。
Point constructPoint(double x, double y);
Transfrom constructIdentityTransform();
Transfrom constructRotateAroundXTransform(double xrot);
Transfrom constructRotateAroundYTransform(double yrot);
Transfrom constructRotateAroundZTransform(double yrot);
Transform operator*(Transform const& lhs, Transform const& rhs);
Point operator*(Transform const& trans, Point const& p);
我希望这能为您提供足够的信息来完成剩下的工作。