Создайте прямоугольник, чтобы покрыть повернутый Microsoft.XNA.Framework.Rectangle - PullRequest
2 голосов
/ 28 декабря 2010

Если у меня есть класс Rectangle в C #, как я могу получить прямоугольник, который охватывает его при повороте?

В основном я хочу найти прямоугольник для повернутого прямоугольника.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010

Мне интересно, как вы сохраняете свой прямоугольник как структуру данных, я имею в виду, что прямоугольник - это 2D, а XNA заставляет меня думать о 3D.

Тем не менее, даже в 2D и 3D, я думаю, что вы хотите, называется AABB (ограничивающий прямоугольник по оси), который очень легко найти, потому что он определяется двумя точками, образованными минимумами и, соответственно, максимумами на каждая ось каждой точки исходного прямоугольника преобразуется вашим вращением.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:

Для структуры Rectangle, содержащей X, Y, Width и Height, прямоугольник имеет следующие две точки:

(x1, y1) = (X, Y) and 
(x2, y2) = (X + Width, Y + Width).

Когда вы поворачиваете прямоугольник, вы практически поворачиваете эти две точки и получаете:

(xr1, yr1) = rotate(x1, y1)
(xr2, yr2) = rotate(x2, y2).

Теперь нужный вам прямоугольник определяется точками этих координат:

p1 = new Point(Min(xr1, xr2), Min(yr1, yr2))
p2 = new Point(Max(xr1, xr2), Max(yr1, yr2))

rotate - это метод, который поворачивает ваш прямоугольник на угол вокруг определенной точки.

0 голосов
/ 28 декабря 2010

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

...