【问题标题】:Rotating a point around the origin in cpp?在cpp中围绕原点旋转一个点?
【发布时间】:2023-03-23 17:33:01
【问题描述】:

我想围绕原点旋转一个点,但我不断收到错误消息。数学部分是可靠的,但是当我希望它从特定点更新 x 和 y 值时,代码似乎失败了。你们能帮帮我吗?

亲切的问候, 文森特


#include <cmath>
#include <iostream>
#include <iomanip>


class Point
{
public:

    double x, y;
    // constructors

    Point()
        : x(0), y(0)
    {} 

    Point(double X, double Y)
        : x(X), y(Y)
    {}

    double roa(double angle) 
    { 
        double new_x = x*cos(angle) - y*sin(angle);
        double new_y = x*sin(angle) + y*sin(angle);
        x = new_x;
        y = new_y;

        return Point(x,y);
    }
};

int main()
{
    Point a(2,2); 
    a = a.roa(50);
    std::cout << a << std::endl;

    return 0
}

解决了!谢谢你们的帮助。您可以在下面找到新代码:


#include <cmath>
#include <iostream>
#include <iomanip>


class Point
{
public:

    double x, y;
    // constructors

    Point()
        : x(0), y(0)
    {} 

    Point(double X, double Y)
        : x(X), y(Y)
    {}

    Point roa(double angle) 
    {
        double angle_rad = angle / (180/M_PI);

        double new_x = x*cos(angle_rad) - y*sin(angle_rad);
        double new_y = x*sin(angle_rad) + y*cos(angle_rad);

        double x = new_x;
        double y = new_y;

        Point p;
        p.x = new_x;
        p.y = new_y;

        return p;

    }
};

int main()
{
    Point a(2,2); 
    a = a.roa(360);
    std::cout << a << std::endl;

    return 0
}


【问题讨论】:

  • 1.呈现的代码无法编译。 2. 决定一个函数是修改现有对象,还是返回一个新对象。两者都做几乎总是一个错误。
  • 欢迎来到 Stackoverflow!代码输出是什么? 期望的输出是什么?
  • 错误说明了什么?

标签: c++ class rotation parameter-passing


【解决方案1】:

文档说角度以弧度为单位: http://www.cplusplus.com/reference/cmath/cos/

只需将角度转换为弧度

double angle_radians = angle_degrees / (180.0 / M_PI);

【讨论】:

    【解决方案2】:

    代码中的一些问题。您在 roa() 上返回 Point(x, y) 而函数返回一个 double ,这使得它无法编译。如果你想旋转同一个点,你已经在 roa() 中设置了 x 和 y 值,不需要在a = a.roa(50) 重新分配整个变量。只需将 roa() 修改为 a.roa() 即可:

    void roa(double angle) 
    { 
      double new_x = x*cos(angle) - y*sin(angle);
      double new_y = x*sin(angle) + y*cos(angle); // mistake here as well
      x = new_x;
      y = new_y;
    }
    

    最后,正如 bialy 指出的,角度应该是弧度而不是度数!

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2012-11-21
      • 2023-04-03
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多