//<pre>

public class Cylinder extends Shape3D {


	public Cylinder(int n) {
		
		super();
		
		double [][]newVertices = new double[4*n+2][6];
		
		int [][]newFaces = new int[3*n][];


		// create front cap vertices
		newVertices[n][0] = 0;
		newVertices[n][1] = 0;
		newVertices[n][2] = 1.0;

		for (int i = 0; i < n; i++) {
			
			newVertices[i][0] = Math.cos(2*Math.PI*i/n);
			newVertices[i][1] = Math.sin(2*Math.PI*i/n);
			newVertices[i][2] = 1.0;
			
		}		

		// create front cap faces
		for (int i = 0; i < n; i++) {	
			newFaces[i] = new int[3];
			
			newFaces[i][0] = n;
			newFaces[i][1] = (i     % (n));
			newFaces[i][2] = ((i+1) % (n));
		}

		// create inside cap vertices
		for (int i = n+1; i < n+n+1; i++) {
			
			newVertices[i][0] = Math.cos(2*Math.PI*i/n);
			newVertices[i][1] = Math.sin(2*Math.PI*i/n);
			newVertices[i][2] = 1.0;
			
		}

		// create rear-inside cap vertices
		for (int i = n+n+1; i < n+n+n+1; i++) {
			
			newVertices[i][0] = Math.cos(2*Math.PI*i/n);
			newVertices[i][1] = Math.sin(2*Math.PI*i/n);
			newVertices[i][2] = -1.0;
			
		}
		
 		// create body faces
		for (int i = n; i < n+n; i++) {
			int v = i - n;
			newFaces[i] = new int[4];
			
			newFaces[i][0] = (  n + 1) + (v    );
			newFaces[i][1] = (  n + 1) + ((v + 1) % n);
			newFaces[i][2] = (2*n + 1) + ((v + 1) % n);
			newFaces[i][3] = (2*n + 1) + (v    );
			
		}
		
		// create rear cap vertices
		newVertices[4*n+1][0] = 0;
		newVertices[4*n+1][1] = 0;
		newVertices[4*n+1][2] = -1.0;

		for (int i = 3*n+1; i < 4*n + 1; i++) {
			
			newVertices[i][0] = Math.cos(2*Math.PI*i/n);
			newVertices[i][1] = Math.sin(2*Math.PI*i/n);
			newVertices[i][2] = -1.0;
			
		}

		// create rear cap faces		
		for (int i = 2*n; i < 3*n; i++) {
			int v = i - 2*n;
			newFaces[i] = new int[3];
			
			newFaces[i][0] = 4*n+1;
			newFaces[i][1] = (3*n + 1) + v;
			newFaces[i][2] = (3*n + 1) + ((v + 1) % n);
		}
				
		super.vertices = newVertices;
		super.faces = newFaces;
	
		transformedVertices = new double[vertices.length][vertices[0].length];

	}
		
}