2012-03-31 55 views
0

對於任務,我需要在Java中製作一個「娃娃」,您可以將它移動並旋轉手臂和腿部以製作有趣/酷炫的姿勢。另外,腿應該能夠伸展(但不能變寬,這很重要)。Java - 保持與圖像的旋轉相關的縮放

我想處理腿伸展的方式是反轉對腿進行的旋轉,使其回到中性直線位置,沿y方向縮放,然後重新執行旋轉。然而,它看起來縮放總是會在y方向,所以一旦它旋轉了,腿就會變寬。它只會看起來應該如果它恢復了直立和站立。

我的代碼現在看起來是這樣的:

leg.transform(AffineTransform.getRotateInstance(legAngle,pivot.getX(),pivot.getY()).createInverse()); 
leg.transform(AffineTransform.getScaleInstance(1,scaleFactor); 
leg.transform(AffineTransform.getRotateInstance(legAngle,pivot.getX(),pivot.getY())); 

我怎樣才能確保縮放旋轉後保持相對的形象呢?

回答

1

有幾種方法可以想到。第一種(最簡單但最慢的)方法是將拉伸的腿部圖像渲染爲圖像,然後旋轉並渲染該圖像。另一種方法是使用Math.cos和Math.sin在每個維度上應用適當的縮放比例以獲得圖像中的所需效果。

+0

在第二種方法中,這意味着我還需要跟蹤縮放的因子並在每次旋轉後在正確的方向上應用新的縮放比例? – SpeedBurner 2012-03-31 18:50:11

+0

本質上。要跟蹤更多的狀態數據。 另外,嘗試創建變換矩陣並將其乘以紙張上的矢量(2,2)以測試您的代碼和您所做的任何更改。有可能在你的一系列轉換中出現一些小錯誤,特別是如果它們一幀一幀地發生。 – GGulati 2012-03-31 18:53:18