рассчитать ориентацию при вращении вокруг круга

Недавно я столкнулся с небольшой проблемой, когда пытался запрограммировать класс с несколькими спрайтами в SFML.

У меня есть контейнер с несколькими спрайтами, каждый из которых может иметь смещение масштаба, поворота и положения от центральной точки контейнера. Тем не менее, я сталкиваюсь с проблемой при попытке повернуть контейнер. Если я просто поверну отдельные спрайты, он не будет учитывать их смещение от центра контейнера (для некоторых битов пользовательского интерфейса это проблема). Немного покопавшись, я обнаружил, как получить их угол от центра и вычислить положение, в котором они должны оказаться при повороте. Однако я не знаю, как сохранить их вращательное вращение одинаковым. В принципе, я хочу быть в состоянии сделать это

введите описание изображения здесь

И после вращения, это будет выглядеть так

введите описание изображения здесь

Из-за того, как SFML обрабатывает поворот и начало координат, я не могу просто установить начало каждого спрайта в центр контейнера и повернуть. Мне нужно иметь какую-то функцию, которая вычисляет, куда они должны идти, а также ориентацию, которую они должны иметь относительно того, что они уже имели (поэтому, если спрайт имел угол 0, когда контейнер поворачивается на 90 градусов, он должен теперь имеет угол 90 градусов. Хотя, если он начинался с угла 90, его следует повернуть на 180 градусов после него, чтобы сохранить его вращение относительно остальных спрайтов в контейнере)

Код, который я использую для получения местоположения, он должен быть относительно контейнера при повороте выглядит следующим образом

float angle = atan2(p1.y -p2.y, p1.x - p2.x);
float x     = radius * cos(angle);
float y     = radius * sin(angle);

icon.set_position(x + spriteX, y + spriteY);

Спасибо за прочтение. Я никогда не был так хорош в математике, поэтому я не знаю, как понять это самостоятельно. Я даже не знал, что и почему, пока не начал исследовать эту проблему. X.x Любая помощь будет принята с благодарностью.

0

Решение

Вы знаете, как вращать спрайт, не перемещая его положение? Если это так, просто поверните сам фактический спрайт на тот же угол, который вы получаете, когда позиция на круге выше. Прямо сейчас вы вращаете позицию, используя sin и cos. Вам также нужно установить «Ориентацию» на тот же угол, который вы рассчитали: float angle = atan2(p1.y - p2.y, p1.x - p2.x);

Удачи!

-pBlack

1

Другие решения

Просто создайте вектор от центральной точки контейнера до спрайта. Затем поверните вектор, и вы получите новую позицию спрайта.

0

По вопросам рекламы [email protected]