Пытаюсь нарисовать стрелку (=направленный отрезок=вектор) с механикой как в пэйнте. То есть зажимаем левую клавишу, и, пока не отпустим, рисуется отрезок как в пэйнте, только в конце отрезка (то есть в текущей позиции мыши) должен быть верно направленный треугольник (в моём случае равносторонний). Делаю по шагам: 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) углу?
Ответ
Так как Вы решили отсчитывать угол от оси Y и в направлении, противоположном общепринятому
angle = 90 - angle;
Комментариев нет:
Отправить комментарий