2013-04-06 136 views
1

我試圖用這個方法來旋轉點:簡單的Java的左右旋轉點

AffineTransform at = AffineTransform.getRotateInstance(Math.toRadians(90), 1, 2); 
double[] pt = {0, 1}; 
at.transform(pt, 0, pt, 0, 1); 
int x = (int)pt[0]; 
int y = (int)pt[1]; 

預期的結果是x=0y=3,因爲我們是在旋轉90 *順時針,但是輸出是目前x=2y=1;

爲什麼我沒有得到預期的結果?

回答

3

程序沒有做錯什麼。通過指定Math.toRadians(90)作爲theta,您指示它逆時針旋轉,而不是順時針旋轉。這就是三角法定義旋轉的方式。使用-Math.toRadians(90)會得到正確的結果。另外,作爲附註,將點值轉換爲int不是檢查代碼的最佳方法。雙精度三角函數容易出現很小的誤差,所以在錯誤的方向上出現一個小小的凹凸會導致錯誤的整數。 (即2.99999999995將被轉換爲2)

(int) Math.round(value)是更安全

+0

我想這是一些簡單的 – 2013-04-06 17:31:00

+0

所以我需要在pt [0]和pt [1]上使用Math.Round - 在其他地方? – 2013-04-06 17:32:46

2

其實,你是逆時針旋轉的。的Javadoc說:

用正角度theta進行的旋轉朝向Y軸正正X軸旋轉點

the Javadoc