2010-05-02 5 views
1

У меня есть прямоугольник любой произвольной ширины и высоты. Я знаю X, Y, ширину и высоту. Как решить верхние правые координаты, когда прямоугольник повернут на N градусов? Я понял, если бы он был выровнен по оси, я бы просто решил для (x, y + width). Unforunatly это не выполняется, когда я применяю матрицу преобразования на прямоугольнике, чтобы повернуть ее вокруг своего центра.Найти верхнюю правую точку поворотного прямоугольника в AS3 (Flex)

+0

Конечно, это также зависит от того, где находится точка регистрации прямоугольника. – jonathanasdf

ответ

0

Вам просто нужно вычислить точку на круге для данного радиуса. Центром вашего прямоугольника будет начало круга, и любой угол будет точкой на окружности круга. Вы должны использовать тригонометрию для вычисления новой точки с помощью вращения. У меня нет времени прямо сейчас, чтобы объяснить все это, но вот ссылка на приличную 2D-библиотеку Javascript, которую я использовал в прошлом, и которая должна дать вам все, что вам нужно (имея в виду, что математика практически одинакова в Javascript и ActionScript), чтобы разобраться в себе.

http://jsdraw2d.jsfiction.com/viewsourcecode.htm

1

Это обычно самый простой и быстрый, чтобы код дисплея Флэша сделать эти виды вещей для вас. Создайте пустой спрайт и поместите его в экранный объект прямоугольника в углу, который вы хотите отслеживать. Затем найдите местоположение этого спрайта в пространстве координат вашего выбора:

var p:Point = new Point(0,0); 
myRectangle.myCornerSprite.localToGlobal(p); 
someDisplayObject.globalToLocal(p); // for a coord space besides the stage 

Это заставляет вас сделать какие-либо предположения о дизайне прямоугольника (т.е. точке регистрации), и работает, даже если прямоугольник должен быть искажен или масштабируется, а также поворачивается. Плюс, это будет намного проще реализовать и поддерживать тогда беспорядок косинусов и еще много чего.

(Обратите внимание, что в приведенном выше коде предполагается, что «верхний правый» относится к определенному углу - если вы хотите проверить, какой из углов происходит в верхнем правом углу на данный момент, я бы просто добавил то же самое с спрайтом на всех четырех углах, и выберите, что находится в верхнем правом углу глобальных коордов.)