#cpp #алгоритм #математика
Пытаюсь нарисовать стрелку (=направленный отрезок=вектор) с механикой как в пэйнте. То есть зажимаем левую клавишу, и, пока не отпустим, рисуется отрезок как в пэйнте, только в конце отрезка (то есть в текущей позиции мыши) должен быть верно направленный треугольник (в моём случае равносторонний). Делаю по шагам: 1) рисую отрезок по 2 точкам; 2) рисую поверх последней точки правильно направленный треугольник. Вопрос по 2 шагу. Моя библиотека умеет рисовать равносторонний треугольник, а также умеет делать его rotate(float angle), где angle - угол в градусах по часовой стрелке. Например, triangle.rotate(45) повернет изначальный равносторонний треугольник (симметричный относительно оси Oy) на 45 по часовой. Так вот, проблема в том, чтобы треугольник вращался вместе с "вращающимся" отрезком. На самом деле отрезок не вращается, а каждый раз отрисовывается заново по 2 точкам: там где зажали + текущие координаты мышки. Вот как я получаю угол между моим текущим отрезком и осью Ox в (0;360]: auto angle = 360.f - std::atan2(second.y - first.y, second.x - first.x) * 180 / 3.14159265f; if (angle > 360.f) angle -= 360; , где first - зажатая точка, second - текущая. Как от этого угла (а может есть вариант проще) перейти к необходимому для triangle.rotate(float angle) углу?
Ответы
Ответ 1
Так как Вы решили отсчитывать угол от оси Y и в направлении, противоположном общепринятому angle = 90 - angle;
Комментариев нет:
Отправить комментарий