2014-05-20 221 views
1

我正在旋轉一個矩形,現在想要計算左上角的新位置。旋轉矩形和計算角

我目前的計算方法是:

Point upLeft = new Point(
     // x-coordinate 
       (int) Math.round((oldx * Math.cos(objectAngleRad)) 
         - (oldy * Math.sin(objectAngleRad))), 
       // y-coordinate 
       (int) Math.round((oldx * Math.sin(objectAngleRad)) 
         + (oldy * Math.cos(objectAngleRad)))); 

計算不起作用。有人可以看到錯誤嗎?

+1

甚至沒有嘗試你的代碼,但想問你爲什麼不使用仿射? http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html –

+1

我的朋友實現了旋轉,我只獲取矩形的角度和當前位置。 – user3658206

+0

但也許我們可以嘗試更改代碼。 Thx :) – user3658206

回答

3

你需要你轉動它之前減去矩形的中點,然後添加回之後,否則你轉動角落關於原點(0,0)

Point upLeft = new Point(
    // x-coordinate 
     (int) Math.round(midx + ((oldx-midx) * Math.cos(objectAngleRad)) 
           - ((oldy-midy) * Math.sin(objectAngleRad))), 
    // y-coordinate 
     (int) Math.round(midy + ((oldx-midx) * Math.sin(objectAngleRad)) 
           + ((oldy-midy) * Math.cos(objectAngleRad)))); 
+0

謝謝。它適用於有關10pi的一個小錯誤,我會嘗試修復它,然後發佈工作版本。 – user3658206

+0

它的工作原理我的計算中只有一個錯誤。 – user3658206