import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.geom.*; import java.math.*; public class ComputeTile implements Runnable { int halt; int block; PolyWedge WEDGE; double A; PolyVector VECTOR; Complex SOURCE; Manager M; int MODE; public ComputeTile() {} public ComputeTile(Complex z,Manager MM,int mode) { WEDGE=PolyWedge.setQuad(MM.C.SES.getParameter()); this.SOURCE=z; this.M=MM; this.MODE=mode; } public void run() { if(M.C.CON_T.MULTI.mode< 4) makeTile(); if(M.C.CON_T.MULTI.mode==4) diamondTotal(); } public void makeTile() { PinwheelMap RM=new PinwheelMap(M.C.SES.getParameter()); Complex z=goodStart(SOURCE); int sector=RM.findSector(z); Complex z1=RM.doMap(sector%4,z); double[][] d=new double[4][2]; for(int i=0;i<4;++i) { d[i][0]=1; //min d[i][1]=-1; //max } PolyWedge WEDGE=new PolyWedge(); halt=1; int test=0; int count=0; double dist=0; int orbit=0; int max=0; // VECTOR=PolyVector.bigSquare(SOURCE); int choice=0; int big=0; while((halt==1)&&(test==0)) { choice=(sector+count)%4; double temp=RM.getStripPosition(choice,z); orbit=orbit+(int)(Math.abs(RM.getDepth(choice,z))); if(orbit>999999999) big=1; z=RM.doMap(choice,z); if((choice==1)&&(maxtemp) d[choice][0]=temp; if(d[choice][1]0)&&(count%100000==0)) { Integer COUNT=new Integer(count); M.C.PROGRESS=COUNT.toString(); M.C.repaint(); } ++count; dist=Complex.dist(z1,z); if((count>6)&&(dist<.00001)) test=1; } for(int i=0;i<4;++i) { d[i][0]=-d[i][0]; d[i][1]=1-d[i][1]; } PolyWedge WEDGE1=RM.rhomb1(d[1][0],d[0][0],d[1][1],d[0][1],SOURCE); PolyWedge WEDGE2=RM.rhomb2(d[2][0],d[3][0],d[2][1],d[3][1],SOURCE); WEDGE=WEDGE1.polyChop(WEDGE1,WEDGE2); halt=0; WEDGE.radius=max; if(big==1) orbit=0; WEDGE.orbit=orbit-1; M.P.nextOrbit(WEDGE); M.P.repaint(); M.C.repaint(); } public void firstReturn(double x,int k) { halt=1; int test=0; int choice=0; double y; Complex z=new Complex(x,k); while((halt==1)&&(test==0)) { z=nextComplex(z,WEDGE); y=Math.abs(z.y); if(y*y<.01) test=1; } } public static int findGoodVertex(Complex w,PolyWedge Q) { int index=0; for(int i=1;i<4;++i) { int test=Complex.isPositivelyOriented(w,Q.z[index],Q.z[i]); if(test==1) { index=i; } } return(index); } public static PolyWedge nextPoly(PolyWedge P,PolyWedge Q) { int k=findGoodVertex(P.getCenter(),Q); PolyWedge PP=new PolyWedge(); for(int i=0;i0)&&(Math.abs(w.y)temp) d[choice][0]=temp; if(d[choice][1]4) return(2); if(X.recognizeRhombus()==1) return(1); return(0); } public Icon fillDiamond(int nn) { Icon X=new Icon(); int n=4*nn-1; if(nn<0) n=3; X.n=0; int count=0; SOURCE.x=n+.000001; if(nn==0) SOURCE.x=WEDGE.z[2].x+.000001; //0th diamond override while(SOURCE.x0) { X=fillDiamond(n); for(int i=0;i