import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.geom.*; import java.math.*; /**This class allows the user to modify the basic proof. It works with the advanced mode of the prover.**/ public class XtraProof { public static int[] determineAction(ProofControl P,double E,int k,BoxConfiguration X,BoxConfiguration Y,double ENERGY,double TETRA,Complex[] TBP) { int mode=P.ACTION.mode; int[] test={0,0}; if(mode==0) test=doBasic(E,k,X,ENERGY,TETRA,TBP); if(mode==1) test=doConfined(E,k,X,Y,ENERGY,TETRA,TBP); if(mode==2) test=doSubdivide(X,P.SI[2].val); int delay=P.SI[1].val; if(delay>0) doDelay(delay); return(test); } /**This is a copy of the basic proof routine.*/ public static int[] doBasic(double E,int k,BoxConfiguration X,double ENERGY,double TETRA,Complex[] TBP) { int[] pass={1,0}; if(BoxConfiguration.near(k,TBP,X)==1) return(pass); if(RedundancyEliminator.eliminate(E,X)==1) return(pass); if(TetrahedralEliminator.eliminate(TETRA,E,X)==1) return(pass); int[] t=EnergyEstimator.eliminate(ENERGY,E,X); if(t[0]==1) return(pass); return(t); } public static int[] doConfined(double E,int k,BoxConfiguration X,BoxConfiguration Y,double ENERGY,double TETRA,Complex[] TBP) { int[] pass={1,0}; if(XtraBox.intersect(X,Y)==0) return(pass); if(BoxConfiguration.near(k,TBP,X)==1) return(pass); if(RedundancyEliminator.eliminate(E,X)==1) return(pass); if(TetrahedralEliminator.eliminate(TETRA,E,X)==1) return(pass); int[] t=EnergyEstimator.eliminate(ENERGY,E,X); if(t[0]==1) return(pass); return(t); } public static int[] doSubdivide(BoxConfiguration X,int depth) { int[] pass={1,0}; int k=X.maxSize(); if(k>depth) return(pass); int index=X.minIndex(); pass[0]=0; pass[1]=index; return(pass); } public static void doDelay(int delay) { for(int k=0;k