围绕另一个点旋转一个点

时间:2014-10-19 10:45:49

标签: c++ math rotation

我试图围绕中心点旋转一个角度 - 标准问题。我已经看过很多关于此的帖子,但我无法让我的实现工作:

    void Point::Rotate(const Point Pivot, const float Angle)
    {
        if (Angle == 0)
            return;

        float s = sin(Angle);
        float c = cos(Angle);

        x -= Pivot.x;
        y -= Pivot.y;

        x = (x * c) - (y * s) + Pivot.x;
        y = (x * s) + (y * c) + Pivot.y;
    }

这是我的代码,我从众多来源收集的逻辑,例如herehere

据我所知,它应该有效。然而,当我将它应用于旋转时,例如,点(0,100)在90度(Pi / 2给予函数)周围(0,0),旋转点显然在(-100,-100) );它应该低于100px。

当试图画一个圆圈(36点)时 - 它会形成一个模糊的心形。它看起来像我看到的图表,我认为是在极坐标中 - 我是否需要将我的观点转换为笛卡尔或其他什么?

有人能发现我的代码有什么问题吗?

编辑:对不起,这个函数是Point类的成员函数 - xy是成员变量:/

1 个答案:

答案 0 :(得分:2)

您几乎就在那里,但是您在倒数第二行中修改x,这意味着输入y计算的坐标值不正确!

相反,请为新的xy使用临时变量,然后在之后添加Pivot坐标:

double nx = (x * c) - (y * s);
double ny = (x * s) + (y * c);

x = nx + Pivot.x;
y = ny + Pivot.y;