#математика #графика
Попробовал сделать по формулам : И так как поворачивать нужно относительно произвольной точки, то от x и y предварительно отнимается расстояние этой точки от начала координат, а затем добавляется. Вот код(С++) : void rotate(int &x, int &y, const double &cosVal, const double &sinVal, const int &cx = 0, const int &cy = 0) { const double _x = x - cx; const double _y = y - cy; x = round( _x * cosVal - _y * sinVal); y = round( _x * sinVal + _y * cosVal); x += cx; y += cy; } Но получается вот это (точка относительно которой крутится - центр треугольника) : (гифка записана с момента когда треугольник уже начал деформироваться и "уезжать" от своего центра).
Ответы
Ответ 1
Вы работаете с математикой с плавающей точкой, при этом используя переменные типа int! Естественно, [накапливающиеся] ошибки округления дают совершенно нелепые результаты! Используйте для координат переменные типа double, а в int их переводите только для вывода графики (и то можно неявно...) void rotate(int &x, int &y, const double &cosVal, const double &sinVal, const int &cx = 0, const int &cy = 0) должна превратиться в void rotate(double &x, double &y, double cosVal, double sinVal, double cx = 0.0, double cy = 0.0)
Комментариев нет:
Отправить комментарий