2013-09-24 2 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);

Используя верхнюю точку в качестве pivotpoint. Затем весь полигон деформируется.

+2

Что ошибка? –

+0

Извините, что первый комментарий был неправильным, вот изображение многоугольника, не повернутого: http://img32.imageshack.us/img32/103/4ulx.png затем повернуто PI: http://i.imgur.com/ q9t0yXU.png Pivotpoint - это верхняя точка – 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

Ваш прием ... для будущего, чем яснее вы столкнулись с вопросом, тем быстрее вы получите ответ :-) –

Смежные вопросы