import java.applet.Applet; import java.awt.event.*; import java.awt.*; import java.awt.geom.*; /**This class is used with the pinwheel map**/ public class Sectors { public Sectors() {} public static GeneralPath getSector(PolyWedge P,int i) { int m0=i; int m1=(i-1+P.count)%P.count; int m2=Strips.firstBackwards(P,m0); int n0=P.slopes[m0]; int n1=P.slopes[m1]; int n2=P.slopes[m2]; int test=Strips.testStrips(n0,n1,P.count); if(test==0) return(getSectorOrdinary(P,n0,n1,n2)); if(test==1) return(getSectorSpecial(P,n0,n1,n2)); return(null); } public static GeneralPath getSectorSpecial(PolyWedge P,int n0,int n1,int n2) { Complex[] Z=Strips.diamond(P,n0,n1); Complex[] W1=new Complex[3]; W1[0]=new Complex(Z[3]); W1[1]=new Complex(Z[2]); W1[2]=Z[3].reflect(Z[1]); W1[1]=Strips.prolong(W1[1],W1[0],100); W1[2]=Strips.prolong(W1[2],W1[0],100); Complex[] W2=new Complex[3]; W2[0]=new Complex(Z[0]); W2[1]=new Complex(Z[1]); W2[2]=Z[0].reflect(Z[2]); W2[1]=Strips.prolong(W2[1],W2[0],100); W2[2]=Strips.prolong(W2[2],W2[0],100); Complex[] W3=Strips.stripData(P,n2); W3[1]=Strips.prolong(W3[0],W3[1],100); Complex[] X=new Complex[2]; X[0]=Vector.findCross2(W3[0],W3[1],W1[0],W1[1]); X[1]=Vector.findCross2(W3[0],W3[1],W1[0],W1[2]); Complex[] Y={W1[2],X[1],X[0],W1[1]}; PolyWedge Q0=new PolyWedge(Y,4); PolyWedge Q1=new PolyWedge(W1,3); PolyWedge Q2=new PolyWedge(W2,3); GeneralPath gp=new GeneralPath(); gp=Q0.toGeneralPath(); gp.append(Q2.toGeneralPath(),false); return(gp); } public static GeneralPath getSectorOrdinary(PolyWedge P,int n0,int n1,int n2) { Complex[] Z=Strips.diamond(P,n0,n1); Complex[] W1=new Complex[3]; W1[0]=new Complex(Z[3]); W1[1]=new Complex(Z[2]); W1[2]=Z[2].reflect(Z[0]); W1[0]=Strips.prolong(W1[0],W1[1],100); W1[2]=Strips.prolong(W1[2],W1[1],100); Complex[] W2=new Complex[3]; W2[0]=new Complex(Z[0]); W2[1]=new Complex(Z[1]); W2[2]=Z[1].reflect(Z[3]); W2[0]=Strips.prolong(W2[0],W2[1],100); W2[2]=Strips.prolong(W2[2],W2[1],100); Complex[] W3=Strips.stripData(P,n2); W3[1]=Strips.prolong(W3[0],W3[1],100); Complex[] X=new Complex[2]; X[0]=Vector.findCross2(W3[0],W3[1],W2[1],W2[0]); X[1]=Vector.findCross2(W3[0],W3[1],W2[1],W2[2]); Complex[] Y={W2[2],X[1],X[0],W2[0]}; PolyWedge Q0=new PolyWedge(Y,4); PolyWedge Q1=new PolyWedge(W1,3); PolyWedge Q2=new PolyWedge(W2,3); GeneralPath gp=new GeneralPath(); gp=Q0.toGeneralPath(); gp.append(Q1.toGeneralPath(),false); return(gp); } public static GeneralPath getAntiSector(PolyWedge P,int i) { int m0=(i-1+P.count)%P.count; int m1=i; int m2=Strips.firstForwards(P,m0); int n0=P.slopes[m0]; int n1=P.slopes[m1]; int n2=P.slopes[m2]; int test=Strips.testStrips(n1,n0,P.count); if(test==0) return(getAntiSectorOrdinary(P,n0,n1,n2)); if(test==1) return(getAntiSectorSpecial(P,n0,n1,n2)); return(null); } public static GeneralPath getAntiSectorSpecial(PolyWedge P,int n0,int n1,int n2) { Complex[] Z=Strips.diamond(P,n0,n1); Complex[] W1=new Complex[3]; W1[0]=new Complex(Z[3]); W1[1]=new Complex(Z[2]); W1[2]=Z[3].reflect(Z[1]); W1[1]=Strips.prolong(W1[1],W1[0],100); W1[2]=Strips.prolong(W1[2],W1[0],100); Complex[] W2=new Complex[3]; W2[0]=new Complex(Z[0]); W2[1]=new Complex(Z[1]); W2[2]=Z[0].reflect(Z[2]); W2[1]=Strips.prolong(W2[1],W2[0],100); W2[2]=Strips.prolong(W2[2],W2[0],100); Complex[] W3=Strips.stripData(P,n2); W3[1]=Strips.prolong(W3[0],W3[1],100); Complex[] X=new Complex[2]; X[0]=Vector.findCross2(W3[0],W3[1],W1[0],W1[1]); X[1]=Vector.findCross2(W3[0],W3[1],W1[0],W1[2]); Complex[] Y={W1[2],X[1],X[0],W1[1]}; PolyWedge Q0=new PolyWedge(Y,4); PolyWedge Q1=new PolyWedge(W1,3); PolyWedge Q2=new PolyWedge(W2,3); GeneralPath gp=new GeneralPath(); gp=Q0.toGeneralPath(); gp.append(Q2.toGeneralPath(),false); return(gp); } public static GeneralPath getAntiSectorOrdinary(PolyWedge P,int n0,int n1,int n2) { Complex[] Z=Strips.diamond(P,n0,n1); Complex[] W1=new Complex[3]; W1[0]=new Complex(Z[3]); W1[1]=new Complex(Z[2]); W1[2]=Z[2].reflect(Z[0]); W1[0]=Strips.prolong(W1[0],W1[1],100); W1[2]=Strips.prolong(W1[2],W1[1],100); Complex[] W2=new Complex[3]; W2[0]=new Complex(Z[0]); W2[1]=new Complex(Z[1]); W2[2]=Z[1].reflect(Z[3]); W2[0]=Strips.prolong(W2[0],W2[1],100); W2[2]=Strips.prolong(W2[2],W2[1],100); Complex[] W3=Strips.stripData(P,n2); W3[1]=Strips.prolong(W3[0],W3[1],100); Complex[] X=new Complex[2]; X[0]=Vector.findCross2(W3[0],W3[1],W2[1],W2[0]); X[1]=Vector.findCross2(W3[0],W3[1],W2[1],W2[2]); Complex[] Y={W2[2],X[1],X[0],W2[0]}; PolyWedge Q0=new PolyWedge(Y,4); PolyWedge Q1=new PolyWedge(W1,3); PolyWedge Q2=new PolyWedge(W2,3); GeneralPath gp=new GeneralPath(); gp=Q0.toGeneralPath(); gp.append(Q1.toGeneralPath(),false); return(gp); } }