2013-09-24 31 views
1

我有一個學校作業,我應該(除其他外)旋轉多邊形。我不能使用任何預先製作的旋轉功能,所以我有一個點數組。陣列如下設置:試圖使用數學旋轉多邊形

intArray[2][amount_of_points]其中intArray[0]等於點x座標,intArray[1]包含y座標。

//x=pivot point x coordinate, y = pivot point y coordinate. 
public int[][] rotate(int[][]matrix,int x, int y, double degrees){ 

    double s=Math.sin(degrees); 
    double c=Math.cos(degrees); 


    for (int i=0;i<matrix.length;i++){ 

     //translate to origin 
     int px=matrix[0][i]-x; 
     int py=matrix[1][i]-y; 

     //rotate 
     double xnew = (px*c)-(py*s); 
     double ynew = (px*s)+(py*c); 

     //translate back 
     px=(int)((xnew+x)+0.5); 
     py=(int)((ynew+y)+0.5); 

     matrix[0][i]=px; 
     matrix[1][i]=py; 
    } 

這是我的代碼到目前爲止,它絕對不是爲我工作。我儘可能地修剪代碼。任何幫助意味着很多!

編輯:我沒有得到任何錯誤,當我運行的代碼,沒有例外等。唯一的問題是,多邊形沒有按照我打算的方式旋轉。

我已經做了一個試驗的多邊形:

polyArray = new int [2][3]; 
    polyArray[0][0]=400; 
    polyArray[1][0]=200; 
    polyArray[0][1]=300; 
    polyArray[1][1]=500; 
    polyArray[0][2]=500; 
    polyArray[1][2]=500; 

我在一個JPanel繪製,然後我運行通過這樣的旋轉方法此數組: polyArray = mm.rotate(polyArray,polyArray [0 ] [0],polyArray [1] [0],Math.PI);

使用頂點作爲樞軸點。整個多邊形然後變形。

+2

什麼錯誤? –

+0

對不起,第一條評論是錯誤的,下面是一個不旋轉的多邊形圖片:http://img32.imageshack.us/img32/103/4ulx.png 然後通過PI旋轉:http://i.imgur.com/ q9t0yXU.png 樞軸點是最高點 – user2573715

+1

我對圖像不感興趣..運行此程序時是否有任何異常? –

回答

3

雖然仍然不是很清楚的問題,我覺得你的問題是循環。 matrix.length is 2。因此,代碼永遠不會使用這些:

polyArray[0][2]=500; 
polyArray[1][2]=500; 

如果更改如下的條件下,它應該工作:

for (int i=0;i<matrix[0].length;i++) 
+0

G V,你是對的,那就是問題所在。對不起,我的問題不是很清楚,我現在很累。非常感謝! – user2573715

+1

您的歡迎...對於未來,您對問題的解答越清楚,您的答案就越快:-) –