import java.awt.*;
import java.io.*;
import java.lang.*;
import java.applet.*;
public class FreeSoR implements WireFrame {
  private int xx[] =
    {70 , 40, 30, 20, 20, 30, 20, 30, 70, 70 };
  private int yy[] =
    {-100,20,30,40,60,70,80,90,94,100};
  private double x[][] = new double[10][10];
  private double y[][] = new double[10][10];
  private double z[][] = new double[10][10];
  private double x_old[][] = new double[10][10];
  private double y_old[][] = new double[10][10];
  private double z_old[][] = new double[10][10];
  private double alpha=Math.PI/15;
  private double beta=Math.PI/15;
  private double gamma=Math.PI/15;
  private double delta=Math.PI/5;
  protected Dimension s; private int n;
  FreeSoR(Dimension s,int n) {
    this.s = s; this.n = n; 
    for( int i=0; i<10; i++ ) {
      x[0][i] = xx[i]; y[0][i] = yy[i]; z[0][i] = 0;
    }
    double x1, z1;
    for( int i=0; i<9; i++ )
      for( int j=0; j<10; j++ ) {
        x1 = x[i][j]; z1 = z[i][j];
        x[i+1][j]=x1*Math.cos(delta)+
                  z1*Math.sin(delta);
        y[i+1][j]=y[i][j];
        z[i+1][j]=-x1*Math.sin(delta)+
                   z1*Math.cos(delta);
      }
  }
  public void Draw(Graphics g) {
//    g.setColor(Color.black);
    int h = n / 3; int v = n % 3; int x1, y1, x2, y2;
    int wu = s.width/3;
    int hu = s.height/4;
    for( int i=0; i<10; i++)
      for( int j=0; j<10; j++) {
        x1 = (int)(x[i][j]/3)+(h+1)*wu;
        y1 = (int)(y[i][j]/3)+(v+1)*hu;
        x2 = (int)(x[(i+1)%10][j]/3)+(h+1)*wu;
        y2 = (int)(y[(i+1)%10][j]/3)+(v+1)*hu;
        g.drawLine(x1,y1,x2,y2);
      }
    for( int i=0; i<10; i++)
      for( int j=0; j<9; j++) {
        x1 = (int)(x[i][j]/3)+(h+1)*wu;
        y1 = (int)(y[i][j]/3)+(v+1)*hu;
        x2 = (int)(x[i][(j+1)%10]/3)+(h+1)*wu;
        y2 = (int)(y[i][(j+1)%10]/3)+(v+1)*hu;
        g.drawLine(x1,y1,x2,y2);
      }
  }
  public void Rotate() {
    double x1,x2,x3,y1,y2,y3,z1,z2;
    for( int i=0; i<10; i++ )
      for( int j=0; j<10; j++ ) {
        x1=x[i][j];y1=y[i][j];z1=z[i][j];x2=x1;
        y2=y1*Math.cos(alpha)-
           z1*Math.sin(alpha);
        z2=y1*Math.sin(alpha)+
           z1*Math.cos(alpha);
        x3=x2*Math.cos(beta)+
           z2*Math.sin(beta);
        y3 = y2;
        x[i][j]=x3*Math.cos(gamma)-
                y3*Math.sin(gamma);
        y[i][j]=x3*Math.sin(gamma)+
                y3*Math.cos(gamma);
        z[i][j]=-x2*Math.sin(beta)+
                 z2*Math.cos(beta);
      }
  }
}
