/* makecube.c ...for rubik.c */ /* started 23-Dec-89 */ extern struct points point; extern struct points start; extern unsigned short size; extern struct one_square square[56]; /* 54 on cube + 2 inter-planes */ void init_squares() /* this defines the cubes geometry called ONCE */ { int face,i; for (face=0; face<2; face++) /* small squares in xy plane */ { (square[9*face+0]).corner[0] = &(point.xyz [0] [0] [face*5]); (square[9*face+0]).corner[1] = &(point.xyz [1] [0] [face*5]); (square[9*face+0]).corner[2] = &(point.xyz [1] [1] [face*5]); (square[9*face+0]).corner[3] = &(point.xyz [0] [1] [face*5]); (square[9*face+1]).corner[0] = &(point.xyz [2] [0] [face*5]); (square[9*face+1]).corner[1] = &(point.xyz [3] [0] [face*5]); (square[9*face+1]).corner[2] = &(point.xyz [3] [1] [face*5]); (square[9*face+1]).corner[3] = &(point.xyz [2] [1] [face*5]); (square[9*face+2]).corner[0] = &(point.xyz [4] [0] [face*5]); (square[9*face+2]).corner[1] = &(point.xyz [5] [0] [face*5]); (square[9*face+2]).corner[2] = &(point.xyz [5] [1] [face*5]); (square[9*face+2]).corner[3] = &(point.xyz [4] [1] [face*5]); (square[9*face+3]).corner[0] = &(point.xyz [0] [2] [face*5]); (square[9*face+3]).corner[1] = &(point.xyz [1] [2] [face*5]); (square[9*face+3]).corner[2] = &(point.xyz [1] [3] [face*5]); (square[9*face+3]).corner[3] = &(point.xyz [0] [3] [face*5]); (square[9*face+4]).corner[0] = &(point.xyz [2] [2] [face*5]); (square[9*face+4]).corner[1] = &(point.xyz [3] [2] [face*5]); (square[9*face+4]).corner[2] = &(point.xyz [3] [3] [face*5]); (square[9*face+4]).corner[3] = &(point.xyz [2] [3] [face*5]); (square[9*face+5]).corner[0] = &(point.xyz [4] [2] [face*5]); (square[9*face+5]).corner[1] = &(point.xyz [5] [2] [face*5]); (square[9*face+5]).corner[2] = &(point.xyz [5] [3] [face*5]); (square[9*face+5]).corner[3] = &(point.xyz [4] [3] [face*5]); (square[9*face+6]).corner[0] = &(point.xyz [0] [4] [face*5]); (square[9*face+6]).corner[1] = &(point.xyz [1] [4] [face*5]); (square[9*face+6]).corner[2] = &(point.xyz [1] [5] [face*5]); (square[9*face+6]).corner[3] = &(point.xyz [0] [5] [face*5]); (square[9*face+7]).corner[0] = &(point.xyz [2] [4] [face*5]); (square[9*face+7]).corner[1] = &(point.xyz [3] [4] [face*5]); (square[9*face+7]).corner[2] = &(point.xyz [3] [5] [face*5]); (square[9*face+7]).corner[3] = &(point.xyz [2] [5] [face*5]); (square[9*face+8]).corner[0] = &(point.xyz [4] [4] [face*5]); (square[9*face+8]).corner[1] = &(point.xyz [5] [4] [face*5]); (square[9*face+8]).corner[2] = &(point.xyz [5] [5] [face*5]); (square[9*face+8]).corner[3] = &(point.xyz [4] [5] [face*5]); } for (face=2; face<4; face++) /* small squares in xz plane */ { (square[9*face+0]).corner[0] = &(point.xyz [0] [(face-2)*5] [0]); (square[9*face+0]).corner[1] = &(point.xyz [1] [(face-2)*5] [0]); (square[9*face+0]).corner[2] = &(point.xyz [1] [(face-2)*5] [1]); (square[9*face+0]).corner[3] = &(point.xyz [0] [(face-2)*5] [1]); (square[9*face+1]).corner[0] = &(point.xyz [2] [(face-2)*5] [0]); (square[9*face+1]).corner[1] = &(point.xyz [3] [(face-2)*5] [0]); (square[9*face+1]).corner[2] = &(point.xyz [3] [(face-2)*5] [1]); (square[9*face+1]).corner[3] = &(point.xyz [2] [(face-2)*5] [1]); (square[9*face+2]).corner[0] = &(point.xyz [4] [(face-2)*5] [0]); (square[9*face+2]).corner[1] = &(point.xyz [5] [(face-2)*5] [0]); (square[9*face+2]).corner[2] = &(point.xyz [5] [(face-2)*5] [1]); (square[9*face+2]).corner[3] = &(point.xyz [4] [(face-2)*5] [1]); (square[9*face+3]).corner[0] = &(point.xyz [0] [(face-2)*5] [2]); (square[9*face+3]).corner[1] = &(point.xyz [1] [(face-2)*5] [2]); (square[9*face+3]).corner[2] = &(point.xyz [1] [(face-2)*5] [3]); (square[9*face+3]).corner[3] = &(point.xyz [0] [(face-2)*5] [3]); (square[9*face+4]).corner[0] = &(point.xyz [2] [(face-2)*5] [2]); (square[9*face+4]).corner[1] = &(point.xyz [3] [(face-2)*5] [2]); (square[9*face+4]).corner[2] = &(point.xyz [3] [(face-2)*5] [3]); (square[9*face+4]).corner[3] = &(point.xyz [2] [(face-2)*5] [3]); (square[9*face+5]).corner[0] = &(point.xyz [4] [(face-2)*5] [2]); (square[9*face+5]).corner[1] = &(point.xyz [5] [(face-2)*5] [2]); (square[9*face+5]).corner[2] = &(point.xyz [5] [(face-2)*5] [3]); (square[9*face+5]).corner[3] = &(point.xyz [4] [(face-2)*5] [3]); (square[9*face+6]).corner[0] = &(point.xyz [0] [(face-2)*5] [4]); (square[9*face+6]).corner[1] = &(point.xyz [1] [(face-2)*5] [4]); (square[9*face+6]).corner[2] = &(point.xyz [1] [(face-2)*5] [5]); (square[9*face+6]).corner[3] = &(point.xyz [0] [(face-2)*5] [5]); (square[9*face+7]).corner[0] = &(point.xyz [2] [(face-2)*5] [4]); (square[9*face+7]).corner[1] = &(point.xyz [3] [(face-2)*5] [4]); (square[9*face+7]).corner[2] = &(point.xyz [3] [(face-2)*5] [5]); (square[9*face+7]).corner[3] = &(point.xyz [2] [(face-2)*5] [5]); (square[9*face+8]).corner[0] = &(point.xyz [4] [(face-2)*5] [4]); (square[9*face+8]).corner[1] = &(point.xyz [5] [(face-2)*5] [4]); (square[9*face+8]).corner[2] = &(point.xyz [5] [(face-2)*5] [5]); (square[9*face+8]).corner[3] = &(point.xyz [4] [(face-2)*5] [5]); } for (face=4; face<6; face++) /* small squares in yz plane */ { (square[9*face+0]).corner[0] = &(point.xyz [(face-4)*5] [0] [0]); (square[9*face+0]).corner[1] = &(point.xyz [(face-4)*5] [0] [1]); (square[9*face+0]).corner[2] = &(point.xyz [(face-4)*5] [1] [1]); (square[9*face+0]).corner[3] = &(point.xyz [(face-4)*5] [1] [0]); (square[9*face+1]).corner[0] = &(point.xyz [(face-4)*5] [0] [2]); (square[9*face+1]).corner[1] = &(point.xyz [(face-4)*5] [0] [3]); (square[9*face+1]).corner[2] = &(point.xyz [(face-4)*5] [1] [3]); (square[9*face+1]).corner[3] = &(point.xyz [(face-4)*5] [1] [2]); (square[9*face+2]).corner[0] = &(point.xyz [(face-4)*5] [0] [4]); (square[9*face+2]).corner[1] = &(point.xyz [(face-4)*5] [0] [5]); (square[9*face+2]).corner[2] = &(point.xyz [(face-4)*5] [1] [5]); (square[9*face+2]).corner[3] = &(point.xyz [(face-4)*5] [1] [4]); (square[9*face+3]).corner[0] = &(point.xyz [(face-4)*5] [2] [0]); (square[9*face+3]).corner[1] = &(point.xyz [(face-4)*5] [2] [1]); (square[9*face+3]).corner[2] = &(point.xyz [(face-4)*5] [3] [1]); (square[9*face+3]).corner[3] = &(point.xyz [(face-4)*5] [3] [0]); (square[9*face+4]).corner[0] = &(point.xyz [(face-4)*5] [2] [2]); (square[9*face+4]).corner[1] = &(point.xyz [(face-4)*5] [2] [3]); (square[9*face+4]).corner[2] = &(point.xyz [(face-4)*5] [3] [3]); (square[9*face+4]).corner[3] = &(point.xyz [(face-4)*5] [3] [2]); (square[9*face+5]).corner[0] = &(point.xyz [(face-4)*5] [2] [4]); (square[9*face+5]).corner[1] = &(point.xyz [(face-4)*5] [2] [5]); (square[9*face+5]).corner[2] = &(point.xyz [(face-4)*5] [3] [5]); (square[9*face+5]).corner[3] = &(point.xyz [(face-4)*5] [3] [4]); (square[9*face+6]).corner[0] = &(point.xyz [(face-4)*5] [4] [0]); (square[9*face+6]).corner[1] = &(point.xyz [(face-4)*5] [4] [1]); (square[9*face+6]).corner[2] = &(point.xyz [(face-4)*5] [5] [1]); (square[9*face+6]).corner[3] = &(point.xyz [(face-4)*5] [5] [0]); (square[9*face+7]).corner[0] = &(point.xyz [(face-4)*5] [4] [2]); (square[9*face+7]).corner[1] = &(point.xyz [(face-4)*5] [4] [3]); (square[9*face+7]).corner[2] = &(point.xyz [(face-4)*5] [5] [3]); (square[9*face+7]).corner[3] = &(point.xyz [(face-4)*5] [5] [2]); (square[9*face+8]).corner[0] = &(point.xyz [(face-4)*5] [4] [4]); (square[9*face+8]).corner[1] = &(point.xyz [(face-4)*5] [4] [5]); (square[9*face+8]).corner[2] = &(point.xyz [(face-4)*5] [5] [5]); (square[9*face+8]).corner[3] = &(point.xyz [(face-4)*5] [5] [4]); } for (i=0; i<54; i++) (square[i]).colour = 1+ i / 9; for (i=54; i<56; i++) (square[i]).colour = 0; } void init_points() /* generate cube centered on (0,0,0) */ { int i,j,k; for (i=0; i<6; i++) for (j=0; j<6; j++) for (k=0; k<6; k++) if (i==0 || i==5 || j==0 || j==5 || k==0 || k==5) { switch (i) { case 0: (start.xyz [i] [j] [k]).x = size * -3; break; case 1: case 2: (start.xyz [i] [j] [k]).x = -size; break; case 3: case 4: (start.xyz [i] [j] [k]).x = size; break; case 5: (start.xyz [i] [j] [k]).x = size * 3; break; } switch (j) { case 0: (start.xyz [i] [j] [k]).y = size * -3; break; case 1: case 2: (start.xyz [i] [j] [k]).y = -size; break; case 3: case 4: (start.xyz [i] [j] [k]).y = size; break; case 5: (start.xyz [i] [j] [k]).y = size * 3; break; } switch (k) { case 0: (start.xyz [i] [j] [k]).z = size * -3; break; case 1: case 2: (start.xyz [i] [j] [k]).z = -size; break; case 3: case 4: (start.xyz [i] [j] [k]).z = size; break; case 5: (start.xyz [i] [j] [k]).z = size * 3; break; } } }