绕轴旋转点

时间:2017-02-27 00:36:30

标签: c++

目前在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

1 个答案:

答案 0 :(得分:1)

您需要从抽象的角度开始思考,而不是迷失在细节中。您需要抽象PointTransform并创建适用于这些抽象的函数。

如果您正在使用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);

我希望这能为您提供足够的信息来完成剩下的工作。