//
// Draw a simple house

import java.awt.*;

public class hw2 extends BufferedApplet
{

	int X[] = new int[4];
	int Y[] = new int[4];
	int Ax[][][] = new int[2][100][4];
	int Ay[][][] = new int[2][100][4];
	int Cx[][] = new int[75][4];
	int Cy[][] = new int[75][4];
	int col[] = new int[75];

	double points[][][] = {
		{{-1,0,0},{0,1,0},{1,0,0},{0,-1,0},{-1,0,0}},
		{{-2,0,0},{0,2,0},{2,0,0},{0,-2,0},{-2,0,0}}
	};


	double a[] = {0,0,0}, b[] = {0,0,0};
	double c[] = {0,0,0}, d[] = {0,0,0};
	int w, h, count = 0;
	int colr, colg,colb,currcol = 255;
	double t = 0;
	long time0;
	double elapsed;

	Matrix3D scaler = new Matrix3D();
	Matrix3D turn = new Matrix3D();

	public void init() {
		super.init();
		scaler.scaleMatrix(0.1,0.1,1);
		turn.zRotationMatrix(1);
		scaler.rotateZ(2);


	}

	public void render(Graphics g) {
		if (w == 0) {
			w = bounds().width;
			h = bounds().height;

			g.setColor(Color.white);    
			g.fillRect(0,0,w,h);
			time0 = System.currentTimeMillis();

		}


		g.setColor(Color.white);    
		g.fillRect(0,0,w,h);
		long time = System.currentTimeMillis();
		elapsed = (time - time0) / 1000.0;
		g.setColor(Color.black);   

		animate();                
		col[count %75] = colb;


		for (int i = 0 ; i < points.length ; i++)  
			for (int j = 1 ; j < points[i].length ; j++) { 
				turn.transform(points[i][j-1], a);              
				turn.transform(points[i][j  ], b);
				Ax[i][count % 100][j-1]=x(a[0]);
				Ay[i][count%100][j-1]=y(a[1]);

				//g.drawLine(x(a[0]), y(a[1]), x(b[0]), y(b[1]));   
				if (i==1){
					scaler.transform(points[i][j-1], c);              
					Cx[count %75][j-1] = x(c[0]);
					Cy[count %75][j-1] = y(c[1]);

				//	X[j-1] = x(c[0]);
				//	Y[j-1] = y(c[1]);
				}
		   }
		if (count < 100)
			for (int k = 0 ; k < count ; k++)
				for (int i=0 ; i < 2; i++)
					for (int j=0 ; j<4; j++){

						g.drawLine(Ax[i][k][j], Ay[i][k][j], Ax[i][k][(j+1)%4], Ay[i][k][(j+1)%4]);   
					}
						
		else
			for (int k = count ; k < count + 100 ; k++)
				for (int i=0 ; i < 2; i++)
					for (int j=0 ; j<4; j++)
						g.drawLine(Ax[i][k%100][j], Ay[i][k%100][j], Ax[i][k%100][(j+1)%4], Ay[i][k%100][(j+1)%4]);   


		if (count < 75)
			for (int k = 0 ; k < count ; k++){
				currcol = col[k];
				g.setColor(new Color(currcol,currcol,currcol));
				g.fillPolygon(Cx[k],Cy[k],4);
			}
		else
			for (int k = count ; k