2010-07-12 4 views
7

가능한 중복 크기를받는 방법 : 는 회전 된 사각형의


Calculate Bounding box coordinates from a rotated rectangle, Picture inside.

내가 회전 된 사각형이를 그래서 내가 어떻게 축 정렬 경계 상자의 크기를 계산합니까 회전 된 2D 좌표의 직사각형?

내가 X, Y, O (각도)를 알고 http://img88.imageshack.us/img88/503/rotp.png

이미지 를 연결 하지만 어떻게 당신이

+0

동일한 방식으로 회전하지 않은 것으로 계산했습니다. 회전은 크기를 변경하지 않습니다 : p –

+1

모서리 나 다른 좌표의 좌표를 얻는 것처럼 "차지하는 영역"을 의미합니까? – integer

답변

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

이것은 나를 위해 작동하지 않는다. 주어진 :'O = 75, Y = 39, X = 105', 결과는'A = -4.76877, B = 81.66039'이다. 이는 분명히 부정확하다. – Campbeln

+0

라디안 단위입니다. 따라서도 단위를 라디안 단위로 변환하십시오. (Google의 계산기는 이것을 수행합니다.) – Souleiman

+1

죄송합니다, 정확하지 않습니다 - 라디안으로 표시됩니다. 나는 당신의 대답에 abs() 용어를 추가했다. (오리지널 버전은 오산으로 이어진 "a = x * sin (o) + y * cos (o)"및 "b = x * cos (o) + y * sin (o)) 위의 그림에서 Campbeln이 설명합니다. – Jpsy

-1

원래 사각형의 면적을 계산 감사

B, 난을받을 수 있나요. 회전에 따라 면적이 변하지 않습니다.

-3

다소 복잡하지만 사각형의 경우 Area = b * h = length * width입니다.

+2

회전 된 사각형은 사각형이 아닙니다 – philshem

-1

사용 [헤론의 공식 삼각형 영역 계산기] s = (a + b + c)/2 또는 삼각형

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 모든 세 지점의 배위이다

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

(모서리)의 둘레의 1/2

RectangleArea=2*A 

또는 Dir [Heron 's Formula Triangle Area Calculator]가 없으면 여기에 일련의 점들이 중요합니다.

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 
1

그럼 세부 사항을 많이 설명하지 않았습니다. 사각형의 높이와 너비가 회전에 관계없이 영역을 제공한다는 것을 알고 있다고 가정합니다. x, y 데이터 포인트 만있는 경우 sqrt((x1-x1)^2 + (y1-y2)^2)을 사용합니다. 측면의 길이를 얻으려면.

당신은 질문을 명확히 했으므로 사각형이 있고 왼쪽 상단 모서리의 각도가 위쪽에서 회전되어 왼쪽면이 이렇게 보입니다.
 /
/
A = 사인 (알파) * 너비
B = 코사인 (알파) * 너비
C = 사인 (알파) * 높이
D = 코사인 (알파) * 높이

너비 = a + d
높이 = b + c
각도를 올바르게 지정했는지 여기에서 분명히 알기 어렵습니다. 만약 다른 각도를 얻을 경우는
폭 나올 = B + C = A + 회전 사각형의 축 ​​정렬 상자 용 D

+0

나는이 형태로도 가고 싶습니다 감사합니다 – Northern

+0

@Northern - 첨부 된 이미지에 따르면이 공식을 사용하지 않을 것입니다. Area = x * y를 사용합니다. – mbeckish

+0

mbeckish가 옳다면 a와 b를 원하면 두 번째 forumla가 필요합니다. – qw3n

0

, 사용자가 각각의 최소 및 최대 값을 찾을
높이 4 개의 회전 된 좌표. minX와 minY는 1 코너가되고 maxX와 maxY는 다른 코너가됩니다.

5

축 정렬 경계 상자를 구성하려면 회전 된 상자의 극점을 찾아야합니다. (0,0), P2 = (x, 0), P3 (x, y), P4 (0, y), 회전 된 'R'에 의해 주어진 직사각형 'P'가 주어지면,

도; 박스 [(minX, minY), (maxX, maxY)]가 회전 된 'P'를 완전히 구속하도록 minX, maxX, minY, maxY를 찾습니다.

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

경계 상자의 값은 회전 된 점 P1 '.. P4'의 구성 요소의 최소/최대 값입니다. 당신이 그것을 회전하기 전의이 같은 지역이야 - 따라서, 2 차원 회전에 대한 설명

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]) 

는, 음 ...

관련 문제