在Java中使用Matrix进行旋转 - 代码无法正常工作

时间:2016-05-01 15:28:07

标签: java matrix graphics

我们在课堂上给出了这个程序,并要求我们在家里尝试它,但它不起作用,我猜这个算法有问题。有人可以帮助我吗?

import java.awt.Graphics;
import javax.swing.JApplet;


public class rotationalTransformation extends JApplet {
    int[] x=new int[3];
          int[] y=new int[3];
           int[][] tMatrix=new int[3][3];

        int no_pts=3;

   public void start()
   { 

          x[0]= 10;
          x[1]= 20;
          x[2]= 30 ;
          y[0]= 10;
          y[1]= 30;
          y[2]= 10 ;

   }


   public void paint(Graphics g)
    {  
        try {       

          System.out.println("Before Rotation");
          g.drawPolygon(x, y, no_pts);
          matrixIdentity(tMatrix);
          System.out.println("Identity Matrix Created");
          rotation(60,10,10);
          System.out.println("Rotating");

          for(int a=0; a<3;a++)
          {
              for(int c=0; c<3;c++)
              {
                  System.out.print(tMatrix[a][c] + " ");
              }
              System.out.println();
          }

          for(int a=0; a<3;a++)
          {
              System.out.println(x[a] + " " + y[a]);
          }

          transformPoints();
          System.out.println("After Rotation");
          g.drawPolygon(x, y, no_pts);

        }
        catch(Exception e){}

      }   

     void matrixIdentity(int[][] m)
    {int i,j;
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    { if(i==j)
      { 
          m[i][j]=1;
      }
    else
        m[i][j]=0;
    }
    }    

     void transformPoints()
     { 
         int tmp;
         for(int a=0; a<3;a++)
   {  
            tmp=tMatrix[0][0]*x[a]+ tMatrix[0][1]*y[a]+tMatrix[0][2];

            y[a]=tMatrix[1][0]*x[a]+tMatrix[1][1]*y[a]+tMatrix[1][2];

            x[a]=tmp;
        }
   }    

    void rotation(double degree,int rx,int ry)
    {   int a;
        a = (int) (degree * 3.14/180);
        tMatrix[0][0]= (int) Math.cos(a) ;
        tMatrix[0][1]= (int) -Math.sin(a) ;
        tMatrix[0][2]= (int) (rx*(1-Math.cos(a))+ ry*Math.sin(a));
        tMatrix[1][0]= (int) Math.sin(a) ;
        tMatrix[1][1]= (int) Math.cos(a);
        tMatrix[1][2]= (int) (ry*(1-Math.cos(a))-rx*Math.sin(a));        
    }
}

它打印原始形状但不打印旋转的形状。

1 个答案:

答案 0 :(得分:0)

我认为你应该多放一行以便能够看到旋转。

transformPoints();
      System.out.println("After Rotation");
      g.drawPolygon(x, y, no_pts);

      //this line will repaint with new position
      this.repaint(); 
    }

希望这有帮助。