Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Повернуть треугольник относительно отрезка

#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;

Комментариев нет:

Отправить комментарий