public class Shape { int NVERTICES,NFACES,NSIDES; Matrix3D transfo = new Matrix3D(); double vertices[][]; int faces[][]; int px[]; int py[]; void sphere(int M, int N){ transfo.identity(); double theta, phi; double xyz[]= new double[3]; int index, index1; NVERTICES = M*(N+1); NFACES = M*N; NSIDES = 4; vertices = new double[NVERTICES][6]; px=new int[NVERTICES]; py=new int[NVERTICES]; faces = new int[NFACES][NSIDES]; for (int n=0; n<=N ; n++) for (int m=0;m0){ index1=(n-1)*M+m; faces[index1][0]=(n-1)*M+m; faces[index1][1]=(n-1)*M+((m+1)%M); faces[index1][2]=n*M+((m+1)%M); faces[index1][3]=n*M+m; } } } void torus(int M, int N, double a, double b){ transfo.identity(); double theta, phi; double xyz[]= new double[6]; int index, index1; NVERTICES = M*(N+1); NFACES = M*N; NSIDES = 4; vertices = new double[NVERTICES][6]; px=new int[NVERTICES]; py=new int[NVERTICES]; faces = new int[NFACES][NSIDES]; for (int n=0; n<=N ; n++) for (int m=0;m0){ index1=(n-1)*M+m; faces[index1][0]=(n-1)*M+m; faces[index1][1]=(n-1)*M+((m+1)%M); faces[index1][2]=n*M+((m+1)%M); faces[index1][3]=n*M+m; } } } void cube(){ transfo.identity(); int index, index1; NVERTICES = 24; NFACES = 6; NSIDES = 4; vertices = new double[NVERTICES][6]; px=new int[NVERTICES]; py=new int[NVERTICES]; faces = new int[NFACES][NSIDES]; for (int xyz=0;xyz<3;xyz++) for (int j=0;j<=1;j++){ index1 = 2*xyz+j; index = 2*NSIDES*xyz + NSIDES*j ; for (int k=0;k0){ double tmppt[]={0,0,z,0,0,1}; vertices[N]=tmppt; } else{ double tmppt[]={0,0,z,0,0,-1}; vertices[N]=tmppt; } for (int n=0; n0){ vertices[n][5]=1; faces[n][0]=n; faces[n][1]=(n+1)%N; } else{ vertices[n][5]=-1; faces[n][1]=n; faces[n][0]=(n+1)%N; } faces[n][2]=N; } } void cap2(int N, double z){ transfo.identity(); double theta; double xyz[]= new double[3]; NVERTICES = N + 1; NFACES = N; NSIDES = 4; vertices = new double[NVERTICES][6]; px=new int[NVERTICES]; py=new int[NVERTICES]; faces = new int[NFACES][NSIDES]; if (z>0){ double tmppt[]={0,0,z,0,0,1}; vertices[N]=tmppt; } else{ double tmppt[]={0,0,z,0,0,-1}; vertices[N]=tmppt; } for (int n=0; n0){ vertices[n][5]=1; faces[n][0]=n; faces[n][1]=(n+1)%N; } else{ vertices[n][5]=-1; faces[n][1]=n; faces[n][0]=(n+1)%N; } faces[n][2]=N; faces[n][3]=N; } } void cylinder(int N){ transfo.identity(); NVERTICES = 4*N+2; NFACES = 3*N; NSIDES = 4; vertices = new double[NVERTICES][6]; px=new int[NVERTICES]; py=new int[NVERTICES]; faces = new int[NFACES][NSIDES]; Shape tmptube = new Shape(); Shape cap1 = new Shape(); Shape cap2 = new Shape(); tmptube.tube(N); cap1.cap(N,1); cap2.cap(N,-1); for (int i=0;i