Почему моя функция вращения вектора изменяет величину вектора? - PullRequest
0 голосов
/ 20 января 2020

Я хочу сделать простую функцию, которая вращает векторную точку b вокруг точки a на заданное количество градусов.

Странно то, что мой код работает несколько - вектор вращается, но он довольно резко меняет длину.

Если я перестану стирать экран каждый кадр, чтобы увидеть каждый кадр сразу, я вижу линии, образующие своего рода восьмиугольник вокруг моего источника.

enter image description here

Еще более странно то, что начало координат находится даже не в центре восьмиугольника, а в левом нижнем углу.

Вот мой код:

struct Point { int x, y; };

struct Line { 
    Point a, b; 
    void rotate(double);
};

void Line::rotate(double t)
{
    t *= 3.141592 / 180;

    double cs = cos(t);
    double sn = sin(t);

    double trans_x = (double)b.x - a.x;
    double trans_y = (double)b.y - a.y;

    double newx = trans_x * cs - trans_y * sn;
    double newy = trans_x * sn + trans_y * cs;

    newx += a.x;
    newy += a.y;

    b.x = (int)newx;
    b.y = (int)newy;
}

Использование ol c :: PixelGameEngine для рендеринга, поэтому я использую int для хранения координат.

...