Как получить размер повернутого прямоугольника [дубликат]

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

У меня есть повернутый прямоугольник, Итак, как вычислить размер выровненной по оси ограничительной рамки для повернутого прямоугольника в 2D-координатах?

Прикрепить Изображение http://img88.imageshack.us/img88/503/rotp.png

Я знаю x, y ,o (угол) но как мне получить, б

спасибо

7 ответов


a = abs(x * sin(o)) + abs(y * cos(o))
b = abs(x * cos(o)) + abs(y * sin(o))

чтобы построить ограничивающую рамку, выровненную по оси, необходимо найти крайние точки повернутой рамки. т. е.

заданный прямоугольник "P", заданный точками P1=(0,0), P2=(x, 0), P3(x, y), P4(0, y), повернутыми на " R "градусов; найти minX, maxX, minY, maxY,такие, что поле [(minX,minY), (maxX, maxY)] полностью ограничивает повернутое "P".

                          +-------P3'----+maxY
                          |     /    \   |
  P4------P3              |   /        \ |
   |      |    rotate     | /            P2'
   |      | => by 'R' =>  P4'           /|
   |      |    degrees    | \         /  |
  P1------P2              |   \     /    |
                          |     \ /      |
                          +-----P1'------+minY
                         minX           maxX

значения для ограничивающей рамки являются минимальными / максимальными компонентами повернутых точек P1'..Р4'; таким образом,

minX=min(P1'[x],P2'[x],P3'[x],P4'[x])
maxX=max(P1'[x],P2'[x],P3'[x],P4'[x])
minY=min(P1'[y],P2'[y],P3'[y],P4'[y])
maxY=max(P1'[y],P2'[y],P3'[y],P4'[y])

для обсуждения 2D-вращений см. http://en.wikipedia.org/wiki/Transformation_matrix#Rotation


Ну, вы не дали много деталей. Я предполагаю, что вы знаете, что высота и ширина прямоугольника даст вам площадь независимо от вращения. Если у вас есть только точки данных x,y, то вы используете sqrt((x1-x1)^2 + (y1-y2)^2). Чтобы получить длину стороны.

вы уточнили свой вопрос, поэтому, если у вас есть прямоугольник, и вы знаете, что угол от верхнего левого угла поворачивается от вершины, поэтому левая сторона выглядит так.
  /
/
ля= синус(Альфа)*ширина
б = Косинус(Альфа)*ширина
с = синус(Альфа)*высота
д = Косинус(Альфа)*высота

width = a + d
высота = б + c
Убедитесь,что вы получаете правильный угол, здесь трудно его прояснить. Если вы получите другой угол, то он выйдет на
ширина = б + c
высота = a + d


для выровненной по оси коробки повернутого прямоугольника вы найдете минимум и максимум каждой из 4 повернутых координат. MinX и minY становятся 1 углом, а maxX и maxY становятся другим углом.


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


использовать [калькулятор треугольника Формулы Герона] s = (a + b + c) / 2 или 1/2 периметра треугольника

A = SquareRoot(s * (s - a) * (s - b) * (s - c))

здесь

a=SquareRoot((X1-X2)^2+(Y1-Y2)^2)  [Side 1 Length]
b=SquareRoot((X1-X3)^2+(Y1-Y3)^2)  [Side 2 Length]
c=SquareRoot((X2-X3)^2+(Y2-Y3)^2)  [Side 3 Length]

X1,Y1,X2,Y2,X3,Y3 являются координациями любых трех точек (углов)

RectangleArea=2*A

или прямой без [калькулятор площади треугольника Формулы Герона], последовательность точек важна здесь.

P1----P2
|     |
P3----P4

 a=SquareRoot((X1-X2)^2+(Y1-Y2)^2)  [Side 1 Length]
 b=SquareRoot((X1-X3)^2+(Y1-Y3)^2)  [Side 2 Length]
 RectangleArea=a*b

это немного сложно, но для прямоугольника,Area = b * h = length * width.