2012-04-02 110 views
16

我讀了http://goo.gl/HKMtO知道如何計算邊界框從旋轉rectangle.But在特殊情況下的座標如下形象:計算旋轉矩形大小從已知的邊界框座標

http://i.stack.imgur.com/3UNfD.png

如何獲得旋轉後的矩形大小是否已經達到邊界框的大小,編碼和旋轉度?

我嘗試寫的代碼在JavaScript

//assume w=123,h=98,deg=35 and get calculate box size 
var deg = 35; 
var bw = 156.9661922099485; 
var bh = 150.82680201149986; 

//calculate w and h 
var xMax = bw/2; 
var yMax = bh/2; 
var radian = (deg/180) * Math.PI; 
var cosine = Math.cos(radian); 
var sine = Math.sin(radian); 
var cx = (xMax * cosine) + (yMax * sine) /(cosine * cosine + sine * sine); 
var cy = -(-(xMax * sine) - (yMax * cosine)/(cosine * cosine + sine * sine)); 
var w = (cx * 2 - bw)*2; 
var h = (cy * 2 - bh)*2; 

但是......答案是不匹配的W和H

+0

你有theta? – 2012-04-02 05:21:14

+0

你是什麼意思的「矩形大小」?如果你旋轉一個物體,你將獲得旋轉的相同物體......相同的長度,相同的面積......如果你有旋轉的結果而不是原始對象,只需使用座標(你說你有它們),計算「角點」之間的距離來獲得每邊的長度。 – ShinTakezou 2012-04-02 05:26:03

+0

我假設,參照你的「案例圖像」,你有'bh','bw'和'theta',並且你想'w'和'h'? – 2012-04-02 05:31:23

回答

33

enter image description here

鑑於邊界框尺寸bx通過byt是矩形的逆時針旋轉通過y尺寸x

x = (1/(cos(t)^2-sin(t)^2)) * ( bx * cos(t) - by * sin(t)) 
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t)) 

推導

爲什麼是第是什麼?

首先,考慮將長度bx切成兩部分,即ab,在矩形的拐角處。使用三角在xy術語來表達bx,並theta

bx = b   + a 
bx = x * cos(t) + y * sin(t)   [1] 

,同樣爲by

by = c   + d 
by = x * sin(t) + y * cos(t)   [2] 

12可以用矩陣形式表示爲:

[ bx ] = [ cos(t) sin(t) ] * [ x ]  [3] 
[ by ] [ sin(t) cos(t) ] [ y ] 

請注意,矩陣是旋轉矩陣(但不完全 - 它由一個減號的了。)

左分割矩陣兩側,贈送:

[ x ] = inverse ([ cos(t) sin(t) ] * [ bx ]      [4] 
[ y ]    [ sin(t) cos(t) ]) [ by ] 

矩陣求逆爲easy to evaluate for a 2x2 matrix,並擴展爲:

[ x ] = (1/(cos(t)^2-sin(t)^2)) * [ cos(t) -sin(t) ] * [ bx ]   [5] 
[ y ]        [-sin(t) cos(t) ] [ by ] 

[5]給出的兩個公式:

x = (1/(cos(t)^2-sin(t)^2)) * ( bx * cos(t) - by * sin(t))    [6] 
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t)) 

就像餡餅一樣簡單!

+0

這是五年的大學水平數學教你如何做。 :P – 2012-04-02 07:58:13

+0

+1:Li-aung Yip:你讓我感到羞愧,因爲你在這個答案中投入了大量的時間和精力。 – 2012-04-02 10:34:36

+2

@HighPerformanceMark:回答問題花費的時間和精力與問題的有趣程度成正比。這一個[書呆子sniped](http://xkcd.com/356/)我。 ;) – 2012-04-02 11:56:44

0

您可能會需要這樣的東西affine transformation發現點座標。然後使用標準幾何公式計算大小。

+0

仿射變換是非常普遍的旋轉情況。在這種情況下,只需要簡單的三角法。 ;) – 2012-04-02 07:56:44

+0

雖然知道仿射不會傷害:) – 2012-04-02 17:38:34