2011-06-01 45 views
0

全部,如何重現對象的平移,旋轉,縮放? (可能語言不可知)

我有一個相當令人沮喪的問題,我認爲很簡單,但我的大腦不工作。總之,問題是:給出一個sprite/image/thingy,你知道有人已經旋轉/翻譯/縮放了精靈,但是你不知道這些發生的順序,你怎麼能夠重現確切的圖像?

爲了便於說明 - 由於圖像是這樣的: Given an image like this

有人具有旋轉/平移/縮放它,使它看起來像這樣(它看起來像什麼操作之後的能力---有兩家他們在這種情況下...) What it looks like after manipulation

的我知道order of operations matter,那就是如果有人先旋轉,然後縮放,然後轉換,你會得到不同的圖像比,如果你是做相反。問題是,由於事先不知道訂單,所以我很難再現這個形象。以下是我得到:

enter image description here

這裏是什麼樣子重疊,給你的,那我就走多遠的想法:

http://infinitetaco.com/pics/merged.png

我設置的anchorPoints精靈在中心,所以這不是問題。我也考慮了縮放更改的寬度/高度,但由於某些原因,它總是有點偏離。看起來旋轉量越劇烈,我的結果越差。在正確的圖像中,你可以看到結果是完美的,但是左邊的結果是很好的,因爲它有很大的旋轉,所以它是離開的。

我知道這可能是一個容易的,但我會感謝一些幫助。

回答

1

如果你僅限於affine transformations(旋轉,平移,縮放),那麼一些線性代數可以給你變換矩陣。您需要精靈(x,y)的原始邊界框和精靈(u,v)的轉換邊界框。首先通過將已轉換座標的中心移動到原始座標的中心來刪除任何平移。現在求解下面的公式 - 你有4個未知數和4個方程,所以只需要做一些代數來找到a,b,c和d。

[x1 x2 x3 x4; y1 y2 y3 y4] = [a b; c d] * [u1 u2 u3 u4; V1 V2 V3 V4]

對於仿射變換,A,B,C,D按照此結構:

[SX * COS(THETA)SY * SIN(THETA); -sx * sin(theta)sy * cos(theta)]

因此,您可以將其縮小爲縮放(sx,sy),旋轉(theta),並且您已經計算了轉換。

有可能更快的方法來做到這一點,但這種方法遵循第一原則。

0

解決!有很多愚蠢的小事我做錯了,但主要的錯誤是,我計算旋轉中心的方式是基於左上角而不是中心!

相關問題