## ## ## mega.mpl ## simulates the moves of the megaminx ## ## David Joyner, 1996-7 ########################################################### A0:=array([ [1,1,1,1,1,1,1,1,1,1,1], [2,2,2,2,2,2,2,2,2,2,2], [3,3,3,3,3,3,3,3,3,3,3], [4,4,4,4,4,4,4,4,4,4,4], [5,5,5,5,5,5,5,5,5,5,5], [6,6,6,6,6,6,6,6,6,6,6], [7,7,7,7,7,7,7,7,7,7,7], [8,8,8,8,8,8,8,8,8,8,8], [9,9,9,9,9,9,9,9,9,9,9], [10,10,10,10,10,10,10,10,10,10,10], [11,11,11,11,11,11,11,11,11,11,11], [12,12,12,12,12,12,12,12,12,12,12]]): # For reference: # A[1]=f1=up,A[2]=f2,A[3]=f3,A[4]=f4,A[5]=f5,A[6]=f6, # A[7]=f7,A[8]=f8,A[9]=f9,A[10]=f10,A[11]=f11,A[12]=f12. # For reference: position_matrix:=array([ [1,2,3,4,5,6,7,8,9,10,11], [12,13,14,15,16,17,18,19,20,21,22], [23,24,25,26,27,28,29,30,31,32,33], [34,35,36,37,38,39,40,41,42,43,44], [45,46,47,48,49,50,51,52,53,54,55], [56,57,58,59,60,61,62,63,64,65,66], [67,68,69,70,71,72,73,74,75,76,77], [78,79,80,81,82,83,84,85,86,87,88], [89,90,91,92,93,94,95,96,97,98,99], [100,101,102,103,104,105,106,107,108,109,110], [111,112,113,114,115,116,117,118,119,120,121], [122,123,124,125,126,127,128,129,130,131,132]]): color7:=white: color1 := red: color2 := blue: color3 := coral: macro(mycolor1=COLOR(RGB, .6607, .3372, .7607)): color4 := mycolor1: color5 := green: color6 := yellow: color0 := turquoise: color8 := pink: macro(mycolor2=COLOR(RGB, .2607, .9372, .8607)): color9 := mycolor2: color10 := aquamarine: color11 := cyan: color12 := magenta: A0:=array([ [1,1,1,1,1,1,1,1,1,1,1], [2,2,2,2,2,2,2,2,2,2,2], [3,3,3,3,3,3,3,3,3,3,3], [4,4,4,4,4,4,4,4,4,4,4], [5,5,5,5,5,5,5,5,5,5,5], [6,6,6,6,6,6,6,6,6,6,6], [7,7,7,7,7,7,7,7,7,7,7], [8,8,8,8,8,8,8,8,8,8,8], [9,9,9,9,9,9,9,9,9,9,9], [10,10,10,10,10,10,10,10,10,10,10], [11,11,11,11,11,11,11,11,11,11,11], [12,12,12,12,12,12,12,12,12,12,12]]): phi := 1/2*5^(1/2)+1/2: pt:=(a,b,t)->expand((b-a)*t+a): P1:=[1,0,phi]: P2:=[1,0,-phi]: P3:=[0,phi,1]: P4:=[-1,0,-phi]: P5:=[-1,0,phi]: P6:=[phi,1,0]: P7:=[-phi,1,0]: P8:=[-phi,-1,0]: P9:=[0,phi,-1]: P10:=[0,-phi,-1]: P11:=[0,-phi,1]: P12:=[phi,-1,0]: Q1:=(P1+P3+P6)/3: Q2:=(P1+P5+P11)/3: Q3:=(P1+P11+P12)/3: Q4:=(P1+P12+P6)/3: q_1_3_6:=(P1+P3+P6)/3: q_1_5_11:=(P1+P5+P11)/3: q_1_11_12:=(P1+P11+P12)/3: q_1_6_12:=(P1+P12+P6)/3: Q5:=(P9+P2+P6)/3: Q6:=(P9+P3+P6)/3: Q7:=(P9+P3+P7)/3: Q8:=(P5+P8+P7)/3: q_2_6_9:=(P9+P2+P6)/3: q_3_6_9:=(P9+P3+P6)/3: q_3_7_9:=(P9+P3+P7)/3: q_5_7_8:=(P5+P8+P7)/3: q_10_11_12:=(P12+P11+P10)/3: Q9:=(P12+P11+P10)/3: Q10:=(P9+P2+P4)/3: Q11:=(P2+P12+P6)/3: Q12:=(P2+P12+P10)/3: Q13:=(P2+P10+P4)/3: q_2_4_9:=(P9+P2+P4)/3: q_2_6_12:=(P2+P12+P6)/3: q_2_10_12:=(P2+P12+P10)/3: q_2_4_10:=(P2+P10+P4)/3: Q15:=(P1+P3+P5)/3: Q14:=(P7+P3+P5)/3: Q16:=(P4+P7+P9)/3: Q17:=(P7+P8+P4)/3: q_1_3_5:=(P1+P3+P5)/3: q_3_5_7:=(P7+P3+P5)/3: q_4_7_9:=(P4+P7+P9)/3: q_4_7_8:=(P7+P8+P4)/3: Q18:=(P10+P8+P11)/3: Q19:=(P4+P8+P10)/3: Q20:=(P5+P11+P8)/3: q_8_10_11:=(P10+P8+P11)/3: q_4_8_10:=(P4+P8+P10)/3: q_5_8_11:=(P5+P11+P8)/3: Q1617a:=(2/3)*Q16+(1/3)*Q17: Q1617b:=(1/3)*Q16+(2/3)*Q17: Q1319a:=(2/3)*Q13+(1/3)*Q19: Q1319b:=(1/3)*Q13+(2/3)*Q19: dodec:=proc() local dod1,dod2,dod3,dod4,dod5,dod6,dod7,dod8,dod9,dod10,dod11,dod12; dod.1:=polygonplot3d([q_1_3_6,q_1_3_5,q_1_5_11,q_1_11_12,q_1_6_12,q_1_3_6], color=color1,style=patch): dod.2:=polygonplot3d([q_2_6_12,q_2_6_9,q_2_4_9,q_2_4_10,q_2_10_12,q_2_6_12], color=color2,style=patch): dod.3:=polygonplot3d([q_1_3_6,q_1_3_5,q_3_5_7,q_3_7_9,q_3_6_9,q_1_3_6], color=color3,style=patch): dod.4:=polygonplot3d([q_4_7_8,q_4_7_9,q_2_4_9,q_2_4_10,q_4_8_10,q_4_7_8], color=color4,style=patch): dod.5:=polygonplot3d([q_5_8_11,q_5_7_8,q_3_5_7,q_1_3_5,q_1_5_11,q_5_8_11], color=color5,style=patch): dod.6:=polygonplot3d([q_1_3_6,q_3_6_9,q_2_6_9,q_2_6_12,q_1_6_12,q_1_3_6], color=color6,style=patch): dod.7:=polygonplot3d([q_5_7_8,q_4_7_8,q_4_7_9,q_3_7_9,q_3_5_7,q_5_7_8], color=color0,style=patch): dod.8:=polygonplot3d([q_5_8_11,q_5_7_8,q_4_7_8,q_4_8_10,q_8_10_11,q_5_8_11], color=color8,style=patch): dod.9:=polygonplot3d([q_4_7_9,q_2_4_9,q_2_6_9,q_3_6_9,q_3_7_9,q_4_7_9], color=color9,style=PATCH): dod.10:=polygonplot3d([q_2_4_10,q_2_10_12,q_10_11_12,q_8_10_11,q_4_8_10,q_2_4_10], color=color10,style=patch): dod.11:=polygonplot3d([q_10_11_12,q_8_10_11,q_5_8_11,q_1_5_11,q_1_11_12,q_10_11_12], color=color11,style=patch): dod.12:=polygonplot3d([q_1_11_12,q_10_11_12,q_2_10_12,q_2_6_12,q_1_6_12,q_1_11_12], color=color12,style=patch): display3d([seq(dod.i,i=1..12)],title=`full dodecahedron`); end: faces:=proc(A::array) ## ## A is the 12x11 array of colors ## optional argument: [theta,phi] = orientation ## local face1,face2,face3,face4,face5,face6,face7,face8,face9, face10,face11,face12,theta,phi; if nargs=2 then theta:=args[2][1]; phi:=args[2][2]; else theta:=45; phi:=85; fi; face1:=facets(q_1_3_6,q_1_3_5,q_1_5_11,q_1_11_12,q_1_6_12,linalg[row](A,1)): face2:=facets(q_1_6_12,q_1_11_12,q_10_11_12,q_2_10_12,q_2_6_12,linalg[row](A,2)); face3:=facets(q_1_11_12,q_1_5_11,q_5_8_11,q_8_10_11,q_10_11_12,linalg[row](A,3)); face10:=facets(q_5_7_8,q_3_5_7,q_3_7_9,q_4_7_9,q_4_7_8,linalg[row](A,10)); face5:=facets(q_1_3_5,q_1_3_6,q_3_6_9,q_3_7_9,q_3_5_7,linalg[row](A,5)): face12:=facets(q_4_7_9,q_2_4_9,q_2_4_10,q_4_8_10,q_4_7_8,linalg[row](A,12)); face4:=facets(q_1_5_11,q_1_3_5,q_3_5_7,q_5_7_8,q_5_8_11,linalg[row](A,4)); face6:=facets(q_1_3_6,q_1_6_12,q_2_6_12,q_2_6_9,q_3_6_9,linalg[row](A,6)); face9:=facets(q_8_10_11,q_5_8_11,q_5_7_8,q_4_7_8,q_4_8_10,linalg[row](A,9)); face11:=facets(q_3_7_9,q_3_6_9,q_2_6_9,q_2_4_9,q_4_7_9,linalg[row](A,11)); face8:=facets(q_2_10_12,q_10_11_12,q_8_10_11,q_4_8_10,q_2_4_10,linalg[row](A,8)); face7:=facets(q_2_6_12,q_2_10_12,q_2_4_10,q_2_4_9,q_2_6_9,linalg[row](A,7)): display3d([face1,face2,face3,face4,face5,face6,face7,face8, face9,face10,face11,face12],orientation=[theta,phi]); end: facets:=proc(P5::list,P4::list,P3::list,P2::list,P1::list,A::array) ## ## P1,...,P5 are the vertices of the pentagonal face ## A is the array of 11 colors (clockwise then center) ## local facet1,facet2,facet3,facet4,facet5,facet6,facet7,facet8,facet9, facet10,facet11,facet12; facet1:=polygonplot3d([P1,pt(P1,P2,1/3), (0.74)*P1+(.26)*(P3+P4)/2,pt(P1,P5,1/3),P1], color=color.(A[1]),style=patch): #corner facet3:=polygonplot3d([P2,pt(P2,P3,1/3), (0.74)*P2+(.26)*(P4+P5)/2,pt(P1,P2,2/3),P2], color=color.(A[3]),style=patch): #corner facet5:=polygonplot3d([P3,pt(P3,P4,1/3), (0.74)*P3+(.26)*(P1+P5)/2,pt(P3,P2,1/3),P3], color=color.(A[5]),style=patch): #corner facet7:=polygonplot3d([P4,pt(P5,P4,2/3), (0.74)*P4+(.26)*(P1+P2)/2,pt(P4,P3,1/3),P4], color=color.(A[7]),style=patch): #corner facet9:=polygonplot3d([P5,pt(P5,P1,1/3), (0.74)*P5+(.26)*(P2+P3)/2,pt(P4,P5,2/3),P5], color=color.(A[9]),style=patch): #corner facet11:=polygonplot3d([(0.74)*P1+(.26)*(P3+P4)/2, (0.74)*P2+(.26)*(P4+P5)/2, (0.74)*P2+(.26)*(P4+P5)/2, (0.74)*P3+(.26)*(P1+P5)/2, (0.74)*P4+(.26)*(P1+P2)/2, (0.74)*P5+(.26)*(P2+P3)/2, (0.74)*P1+(.26)*(P3+P4)/2], color=color.(A[11]),style=patch): #center facet10:=polygonplot3d([pt(P5,P1,2/3),pt(P5,P1,1/3), (0.74)*P5+(.26)*(P2+P3)/2,(0.74)*P1+(.26)*(P3+P4)/2, pt(P5,P1,2/3)], color=color.(A[10]),style=patch): #edge facet2:=polygonplot3d([pt(P2,P1,2/3),pt(P2,P1,1/3), (0.74)*P2+(.26)*(P4+P5)/2,(0.74)*P1+(.26)*(P3+P4)/2, pt(P2,P1,2/3)], color=color.(A[2]),style=patch): #edge facet8:=polygonplot3d([pt(P5,P4,1/3),pt(P4,P5,1/3), (0.74)*P4+(.26)*(P2+P1)/2,(0.74)*P5+(.26)*(P2+P3)/2, pt(P4,P5,2/3)], color=color.(A[8]),style=patch): #edge facet6:=polygonplot3d([pt(P3,P4,1/3),pt(P4,P3,1/3), (0.74)*P4+(.26)*(P2+P1)/2,(0.74)*P3+(.26)*(P1+P5)/2, pt(P3,P4,1/3)], color=color.(A[6]),style=patch): #edge facet4:=polygonplot3d([pt(P2,P3,1/3),pt(P3,P2,1/3), (0.74)*P3+(.26)*(P5+P1)/2,(0.74)*P2+(.26)*(P4+P5)/2, pt(P2,P3,1/3)], color=color.(A[4]),style=patch): #edge display3d([facet1,facet3,facet4,facet5,facet6,facet7,facet8, facet9,facet10,facet11,facet2]); end: list2array:=proc(n::integer) ## ## converts position number 1..132 to 11x12 array index ## if 0