import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.geom.*; import java.math.*; /**This class has all the combinatorial data for the basic subdivision scheme.**/ public class SubdivisionData { public static int[] scheme(int choice) { int[] A={0,0,0}; if(choice==0) {A[0]=9;A[1]=25;A[2]=39;} if(choice==1) {A[0]=10;A[1]=14;A[2]=5;} if(choice==2) {A[0]=10;A[1]=12;A[2]=17;} if(choice==3) {A[0]=10;A[1]=12;A[2]=16;} if(choice==4) {A[0]=9;A[1]=23;A[2]=27;} if(choice==5) {A[0]=8;A[1]=36;A[2]=28;} if(choice==6) {A[0]=8;A[1]=35;A[2]=17;} if(choice==7) {A[0]=9;A[1]=24;A[2]=6;} if(choice==8) {A[0]=9;A[1]=26;A[2]=6;} if(choice==9) {A[0]=9;A[1]=26;A[2]=7;} if(choice==10) {A[0]=9;A[1]=25;A[2]=40;} if(choice==11) {A[0]=20;A[1]=38;A[2]=28;} if(choice==12) {A[0]=21;A[1]=3;A[2]=16;} if(choice==13) {A[0]=21;A[1]=1;A[2]=6;} if(choice==14) {A[0]=21;A[1]=1;A[2]=5;} if(choice==15) {A[0]=20;A[1]=34;A[2]=38;} if(choice==16) {A[0]=19;A[1]=25;A[2]=39;} if(choice==17) {A[0]=19;A[1]=24;A[2]=6;} if(choice==18) {A[0]=20;A[1]=35;A[2]=17;} if(choice==19) {A[0]=20;A[1]=37;A[2]=17;} if(choice==20) {A[0]=20;A[1]=37;A[2]=18;} if(choice==21) {A[0]=20;A[1]=36;A[2]=29;} if(choice==22) {A[0]=31;A[1]=3;A[2]=17;} if(choice==23) {A[0]=32;A[1]=36;A[2]=27;} if(choice==24) {A[0]=32;A[1]=34;A[2]=39;} if(choice==25) {A[0]=32;A[1]=34;A[2]=38;} if(choice==26) {A[0]=31;A[1]=1;A[2]=5;} if(choice==27) {A[0]=30;A[1]=14;A[2]=6;} if(choice==28) {A[0]=30;A[1]=13;A[2]=39;} if(choice==29) {A[0]=31;A[1]=2;A[2]=28;} if(choice==30) {A[0]=31;A[1]=4;A[2]=28;} if(choice==31) {A[0]=31;A[1]=4;A[2]=29;} if(choice==32) {A[0]=31;A[1]=3;A[2]=18;} if(choice==33) {A[0]=42;A[1]=16;A[2]=6;} if(choice==34) {A[0]=43;A[1]=25;A[2]=38;} if(choice==35) {A[0]=43;A[1]=23;A[2]=28;} if(choice==36) {A[0]=43;A[1]=23;A[2]=27;} if(choice==37) {A[0]=42;A[1]=12;A[2]=16;} if(choice==38) {A[0]=41;A[1]=3;A[2]=17;} if(choice==39) {A[0]=41;A[1]=2;A[2]=28;} if(choice==40) {A[0]=42;A[1]=13;A[2]=39;} if(choice==41) {A[0]=42;A[1]=15;A[2]=39;} if(choice==42) {A[0]=42;A[1]=15;A[2]=40;} if(choice==43) {A[0]=42;A[1]=14;A[2]=7;} return(A); } public static Complex plainVector(int which,int choice) { if(which==2) return(vector2(choice)); return(vector3(choice)); } public static Complex eigenVector(int which,int choice) { if(which==2) return(eigenVector2(choice)); return(eigenVector3(choice)); } public static Complex vector2(int choice) { int[] A=vector2Data(choice); Complex z=new Complex(A[0],A[1]); return(z); } public static int[] vector2Data(int choice) { int[] A={0,0}; int c=choice; if(choice>21) c=choice-22; if(c==0) {A[0]=0;A[1]=8;} if(c==1) {A[0]=6;A[1]=2;} if(c==2) {A[0]=2;A[1]=-2;} if(c==3) {A[0]=2;A[1]=-2;} if(c==4) {A[0]=-4;A[1]=4;} if(c==5) {A[0]=-6;A[1]=2;} if(c==6) {A[0]=-4;A[1]=0;} if(c==7) {A[0]=2;A[1]=6;} if(c==8) {A[0]=4;A[1]=4;} if(c==9) {A[0]=2;A[1]=2;} if(c==10) {A[0]=-2;A[1]=6;} if(c==11) {A[0]=-8;A[1]=0;} if(c==12) {A[0]=-2;A[1]=-6;} if(c==13) {A[0]=2;A[1]=-2;} if(c==14) {A[0]=2;A[1]=-2;} if(c==15) {A[0]=-4;A[1]=4;} if(c==16) {A[0]=-2;A[1]=6;} if(c==17) {A[0]=0;A[1]=4;} if(c==18) {A[0]=-6;A[1]=-2;} if(c==19) {A[0]=-4;A[1]=-4;} if(c==20) {A[0]=-2;A[1]=-2;} if(c==21) {A[0]=-6;A[1]=2;} if(choice>21) { for(int i=0;i<2;++i) A[i]=-A[i]; } return(A); } public static Complex eigenVector2(int choice) { int[] A=eigenVector2Data(choice); Complex z=new Complex(A[0],A[1]); return(z); } public static int[] eigenVector2Data(int choice) { int[] A={0,0}; int c=choice; if(c>21) c=choice-22; if(c==1) {A[0]=6;A[1]=2;} if(c==2) {A[0]=3;A[1]=-3;} if(c==3) {A[0]=2;A[1]=-2;} if(c==4) {A[0]=-3;A[1]=3;} if(c==5) {A[0]=-6;A[1]=2;} if(c==6) {A[0]=-3;A[1]=-1;} if(c==7) {A[0]=3;A[1]=5;} if(c==8) {A[0]=5;A[1]=3;} if(c==9) {A[0]=3;A[1]=1;} if(c==10) {A[0]=-2;A[1]=6;} if(c==12) {A[0]=-2;A[1]=-6;} if(c==13) {A[0]=3;A[1]=-3;} if(c==14) {A[0]=2;A[1]=-2;} if(c==15) {A[0]=-3;A[1]=3;} if(c==16) {A[0]=-2;A[1]=6;} if(c==17) {A[0]=1;A[1]=3;} if(c==18) {A[0]=-5;A[1]=-3;} if(c==19) {A[0]=-3;A[1]=-5;} if(c==20) {A[0]=-1;A[1]=-3;} if(c==21) {A[0]=-6;A[1]=2;} if(choice>21) { for(int i=0;i<2;++i) A[i]=-A[i]; } return(A); } public static Complex vector3(int choice) { int[] A=vector3Data(choice); double s=Math.sqrt(2); Complex z=new Complex(A[0]+A[1]*s,A[2]+A[3]*s); return(z); } public static int[] vector3Data(int choice) { int[] A={0,0,0,0}; int c0=choice; if(choice>21) c0=choice-22; int c=c0; if((choice>21)&&(c0<11)) c=c0+11; if((choice>21)&&(c0>10)) c=c0-11; if(c==0) {A[0]=0;A[1]=0;A[2]=0;A[3]=0;} if(c==1) {A[0]=0;A[1]=-1;A[2]=-2;A[3]=-1;} if(c==2) {A[0]=2;A[1]=1;A[2]=0;A[3]=-1;} if(c==3) {A[0]=2;A[1]=1;A[2]=0;A[3]=-1;} if(c==4) {A[0]=-2;A[1]=-2;A[2]=2;A[3]=0;} if(c==5) {A[0]=-2;A[1]=-1;A[2]=0;A[3]=-1;} if(c==6) {A[0]=0;A[1]=0;A[2]=0;A[3]=-2;} if(c==7) {A[0]=-2;A[1]=-1;A[2]=4;A[3]=1;} if(c==8) {A[0]=-2;A[1]=-2;A[2]=2;A[3]=0;} if(c==9) {A[0]=-2;A[1]=-1;A[2]=0;A[3]=-1;} if(c==10) {A[0]=0;A[1]=-1;A[2]=2;A[3]=1;} if(c==11) {A[0]=0;A[1]=0;A[2]=0;A[3]=0;} if(c==12) {A[0]=0;A[1]=1;A[2]=2;A[3]=1;} if(c==13) {A[0]=-2;A[1]=-1;A[2]=4;A[3]=1;} if(c==14) {A[0]=-2;A[1]=-1;A[2]=0;A[3]=1;} if(c==15) {A[0]=2;A[1]=2;A[2]=2;A[3]=0;} if(c==16) {A[0]=2;A[1]=1;A[2]=0;A[3]=1;} if(c==17) {A[0]=0;A[1]=0;A[2]=4;A[3]=2;} if(c==18) {A[0]=2;A[1]=1;A[2]=0;A[3]=-1;} if(c==19) {A[0]=2;A[1]=2;A[2]=2;A[3]=0;} if(c==20) {A[0]=2;A[1]=1;A[2]=4;A[3]=1;} if(c==21) {A[0]=0;A[1]=1;A[2]=-2;A[3]=-1;} if(choice>21) { for(int i=0;i<4;++i) A[i]=-A[i]; } return(A); } public static Complex eigenVector3(int choice) { int[] A=eigenVector3Data(choice); double s=Math.sqrt(2); Complex z=new Complex(A[0]+A[1]*s,A[2]+A[3]*s); return(z); } public static int[] eigenVector3Data(int choice) { int[] A={0,0,0,0}; int c0=choice; if(choice>21) c0=choice-22; int c=c0; if((choice>21)&&(c0<11)) c=c0+11; if((choice>21)&&(c0>10)) c=c0-11; if(c==0) {A[0]=0;A[1]=0;A[2]=0;A[3]=0;} if(c==1) {A[0]=0;A[1]=-1;A[2]=-2;A[3]=-1;} if(c==2) {A[0]=2;A[1]=1;A[2]=-2;A[3]=-1;} if(c==3) {A[0]=2;A[1]=1;A[2]=0;A[3]=-1;} if(c==4) {A[0]=-2;A[1]=-2;A[2]=0;A[3]=0;} if(c==5) {A[0]=-2;A[1]=-1;A[2]=0;A[3]=-1;} if(c==6) {A[0]=0;A[1]=0;A[2]=-2;A[3]=-2;} if(c==7) {A[0]=-2;A[1]=-1;A[2]=2;A[3]=1;} if(c==8) {A[0]=-2;A[1]=-2;A[2]=0;A[3]=0;} if(c==9) {A[0]=-2;A[1]=-1;A[2]=-2;A[3]=-1;} if(c==10) {A[0]=0;A[1]=-1;A[2]=2;A[3]=1;} if(c==11) {A[0]=0;A[1]=0;A[2]=0;A[3]=0;} if(c==12) {A[0]=0;A[1]=1;A[2]=2;A[3]=1;} if(c==13) {A[0]=-2;A[1]=-1;A[2]=2;A[3]=1;} if(c==14) {A[0]=-2;A[1]=-1;A[2]=0;A[3]=1;} if(c==15) {A[0]=2;A[1]=2;A[2]=0;A[3]=0;} if(c==16) {A[0]=2;A[1]=1;A[2]=0;A[3]=1;} if(c==17) {A[0]=0;A[1]=0;A[2]=2;A[3]=2;} if(c==18) {A[0]=2;A[1]=1;A[2]=-2;A[3]=-1;} if(c==19) {A[0]=2;A[1]=2;A[2]=0;A[3]=0;} if(c==20) {A[0]=2;A[1]=1;A[2]=2;A[3]=1;} if(c==21) {A[0]=0;A[1]=1;A[2]=-2;A[3]=-1;} if(choice>21) { for(int i=0;i<4;++i) A[i]=-A[i]; } return(A); } public static Color discrepancy(int choice,int k) { if(choice==2) return(discrepancy2(k)); return(discrepancy3(k)); } public static Color discrepancy2(int k) { int[] a=vector2Data(k); int[] b=eigenVector2Data(k); int[] c={a[0]-b[0],a[1]-b[1]}; int test=2; if((c[0]==0)&&(c[1]==0)) test=0; if((c[0]==1)&&(c[1]==-1)) test=1; if((c[0]==-1)&&(c[1]==1)) test=-1; if(test==0) return(Color.white); if(test==-1) return(new Color(255,0,255)); if(test==1) return(new Color(0,220,220)); return(Color.white); } public static Color discrepancy3(int k) { int[] a=vector3Data(k); int[] b=eigenVector3Data(k); int c=a[2]-b[2]; int test=2; if(c==0) test=0; if(c==2) test=-1; if(c==-2) test=1; if(test==0) return(Color.white); if(test==-1) return(new Color(255,0,255)); if(test==1) return(new Color(0,220,220)); return(Color.white); } }