home *** CD-ROM | disk | FTP | other *** search
/ Internet Gallery / INTERGAL.bin / intergal / prgs / idv21 / data.z / WireCube.java < prev    next >
Text File  |  1996-04-22  |  2KB  |  74 lines

  1. import java.awt.*;
  2.  
  3. public class WireCube implements MyWidget {
  4.     
  5.     final static    int 
  6.             ORG_X = 0, ORG_Y = 1, ORG_Z = 2,
  7.                ROT_X = 3, ROT_Y = 4, ROT_Z = 5,
  8.             TRA_X = 6, TRA_Y = 7,
  9.             EYE   = 4000, SCREENBOARD = 400;       // 3d zu 2d transformation
  10.  
  11.     final static int Points=8,
  12.                 Point[][] =  { { -LEN*2,LEN*2,   0, 0,0,0,0,0 }, 
  13.                           {-LEN*2,-LEN*2,   0, 0,0,0,0,0 }, 
  14.                           { LEN*2,-LEN*2,   0, 0,0,0,0,0 }, 
  15.                           { LEN*2, LEN*2,   0, 0,0,0,0,0 },
  16.                           {-LEN*2, LEN*2,-LEN*2, 0,0,0,0,0 }, 
  17.                           {-LEN*2,-LEN*2,-LEN*2, 0,0,0,0,0 }, 
  18.                           { LEN*2,-LEN*2,-LEN*2, 0,0,0,0,0 }, 
  19.                           { LEN*2, LEN*2,-LEN*2, 0,0,0,0,0 } };
  20.     final static int Lines = 12;
  21.     final static int Line[][] = { {0,1},{1,2},{2,3},{3,0},
  22.                        {4,5},{5,6},{6,7},{7,4},
  23.                        {0,4},{1,5},{2,6},{3,7} };
  24.  
  25.     int s_xaxis=0,s_yaxis=0,s_zaxis=0;
  26.         
  27.     void Rotate( int xaxis, int yaxis, int zaxis)
  28.     {
  29.         s_xaxis+=xaxis; s_yaxis+=yaxis; s_zaxis+=zaxis;
  30.         int i=Points;
  31.         while( i-- > 0) {
  32.         // Drehung um die x-Achse
  33.             int y1 = (SinCos.Cos(s_xaxis)*Point[i][ORG_Y] - SinCos.Sin(s_xaxis)*Point[i][ORG_Z]) >> 14, 
  34.                 z1 = (SinCos.Cos(s_xaxis)*Point[i][ORG_Z] + SinCos.Sin(s_xaxis)*Point[i][ORG_Y]) >> 14;
  35.  
  36.         // Drehung um die y-Achse
  37.             Point[i][ROT_Z] = (SinCos.Cos(s_yaxis)*z1     - SinCos.Sin(s_yaxis)*Point[i][ORG_X]) >> 14; 
  38.             int x2 = (SinCos.Cos(s_yaxis)*Point[i][ORG_X] + SinCos.Sin(s_yaxis)*z1   )          >> 14;
  39.  
  40.         // Drehung um die z-Achse
  41.             Point[i][ROT_X] = (SinCos.Cos(s_zaxis)*x2     - SinCos.Sin(s_zaxis)*y1   ) >> 14; 
  42.             Point[i][ROT_Y] = (SinCos.Cos(s_zaxis)*y1     + SinCos.Sin(s_zaxis)*x2   ) >> 14; 
  43.         }    
  44.     }
  45.  
  46.     void Translate()
  47.     {
  48.         int i=Points;
  49.         while( i-- > 0) {
  50.             Point[i][TRA_X] = SCREENBOARD*Point[i][ROT_X] / (EYE - Point[i][ROT_Z]) +LEN/2;
  51.             Point[i][TRA_Y] = LEN/2-SCREENBOARD*Point[i][ROT_Y] / (EYE - Point[i][ROT_Z]);
  52.         }
  53.     }
  54.  
  55.     public void repaint(Graphics g)    
  56.     {
  57.         g.setColor( Color.black );
  58.         g.fillRect( 0, 0, LEN, LEN ); 
  59.  
  60.         g.setColor( Color.green );
  61.  
  62.         Rotate( 2, 3, 6);
  63.         Translate();
  64.  
  65.         int i=Lines;
  66.         while( i-- > 0 ) {
  67.             g.drawLine(    Point[ Line[i][0] ][TRA_X], Point[ Line[i][0] ][TRA_Y],
  68.                           Point[ Line[i][1] ][TRA_X], Point[ Line[i][1] ][TRA_Y] );
  69.         }
  70.     }
  71. }
  72.  
  73.  
  74.