Я хочу сделать простую функцию, которая вращает векторную точку b вокруг точки a на заданное количество градусов.
Странно то, что мой код работает несколько - вектор вращается, но он довольно резко меняет длину.
Если я перестану стирать экран каждый кадр, чтобы увидеть каждый кадр сразу, я вижу линии, образующие своего рода восьмиугольник вокруг моего источника.
Еще более странно то, что начало координат находится даже не в центре восьмиугольника, а в левом нижнем углу.
Вот мой код:
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 для хранения координат.