gpt4 book ai didi

c++ - 在cpp中围绕原点旋转一个点?

转载 作者:行者123 更新时间:2023-11-30 04:41:39 26 4
gpt4 key购买 nike

我想围绕原点旋转一个点,但我总是出错。数学部分是可靠的,但是当我希望它从特定点更新 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
}


最佳答案

代码中的一些问题。您在 roa() 上返回 Point(x, y) ,而该函数返回一个 double 值,这使得它无法编译。如果你想旋转同一个点,你已经在 roa() 中设置了 x 和 y 值,不需要在 a = a.roa(50) 重新分配整个变量。只需将 a.roa() 修改为 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 所指出的,角度应该以弧度而不是度为单位!

关于c++ - 在cpp中围绕原点旋转一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com