Java中使用矩阵的旋转-代码不起作用



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

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));        
    }
}

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

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

transformPoints();
      System.out.println("After Rotation");
      g.drawPolygon(x, y, no_pts);
      //this line will repaint with new position
      this.repaint(); 
    }

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新