Рисунок повернутого прямоугольника - PullRequest
0 голосов
/ 15 января 2020

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

picture

Фиолетовый контур должен выглядеть как красный. Это код для поворота


 double d2r(double d)
        {
            return (d / 180.0) * ((double)M_PI);
        }

 double sind(double x) 
        {

            return std::sin(d2r(x));
        }


 double cosd(double x) 
        {
            return std::cos(d2r(x));
        }


std::pair<double, double> rotate_around(double x, double y, double o_x, double o_y, double angle)
{


    x = o_x + (x - o_x) * cosd(angle) - (y - o_y) * sind(angle);
    y = o_y + (y - o_y) * cosd(angle) + (x - o_x) * sind(angle);

    return std::pair<double, double>(x, y);

}

Функция rotate_around вызывается со следующими параметрами (оригинал x, оригинал y, середина x прямоугольника, середина y прямоугольника, угол прямоугольника)

Может кто-нибудь сказать мне, что я здесь не так делаю?

1 Ответ

0 голосов
/ 16 января 2020
x-= o_x; y-= o_y;
angle= d2r(angle);
double c= std::cos(angle), s= std::sin(angle);

return std::pair<double, double>(o_x + x * c - y * s, o_y + y * c + x * s);

будет работать.

...