2013-05-06 1 views
1

Я пытаюсь написать сценарий (javascript) в API программы Virtual Table Top, чтобы я мог манипулировать некоторыми токенами (Car Wars :)).Вращение прямоугольника из любой точки

Я как бы нахожу ответ, но, похоже, я борюсь и изобретаю колесо, поэтому я подумал, что попрошу о помощи. Одна из причин, по которым я запутался, - это возврат результатов, основанных на + y, вниз, а Deg - по часовой стрелке, что отличается от того, что хотят все триггерные формулы (против часовой стрелки и + y вверх).

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

Это не позволит мне включить изображение, так как я новичок, поэтому надеюсь, что описание достаточно хорошее. У меня было все, что было сделано. :(

В API я не могу нарисовать прямоугольник, я могу установить его вращение и значение центра. Поэтому я думал, что могу найти x, y одного угла в данный момент, а затем повернуть его (я могу сделать это легко, установив поворот прямоугольников), найдите новый x, y этого же угла. Затем я буду знать смещение и применим его к центру (так как перемещается прямоугольник).

Таким образом, мне нужно найти x, y любого угла прямоугольника при любом заданном начальном угле, затем снова под новым углом, повернутым в центре. Это смещение затем будет легко применено к центр x, y, и прямоугольник будет поворачиваться вдоль одного из его углов.

Спасибо за любую помощь, которую вы можете дать. Я надеюсь, что в конечном итоге это выясню, просто написание этого описания на самом деле помогло мне продумать это. Но я сейчас застрял!

Konrad

ответ

1

Хитрость вращается вокруг произвольной точки 2d (например, один из четырех углов прямоугольника), является первым перевести вершины формы, так что точка, вокруг которой вы хотите rotate находится в начале координат (т.е. 0,0).

Для этого:
1. Переведите свой прямоугольник на (-x, -y).
2. Поверните прямоугольник на нужный угол.
3. Переведите свой прямоугольник на (x, y), чтобы поместить его обратно там, где он был первоначально.
где (x, y) - координаты x/y точки, вокруг которой вращается.

Вы можете использовать отрицательные углы для регулировки вращения по часовой стрелке.

Существует много информации об этом в интернете, например: http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2drota.htm