import java.applet.Applet; import java.awt.event.*; import java.awt.*; import java.awt.geom.*; public class PolyWedge { Complex[] z=new Complex[100]; int count,radius,orbit; int history; Complex[] X=new Complex[4]; //strip 0 data Complex[] w=new Complex[3]; //pinwheel barrier int[] slopes=new int[100]; public PolyWedge() {} public PolyWedge(Complex z0,Complex z1,Complex z2) { this.count=3; this.z[0]=z0; this.z[1]=z1; this.z[2]=z2; } public PolyWedge(Complex[] Z,int n) { this.count=n; for(int i=0;iz[i].x) xmin=z[i].x; if(xmaxz[i].y) ymin=z[i].y; if(ymaxdx) return(0); if(ymin>dy) return(0); if(xmax<-dx) return(0); if(ymax<-dy) return(0); return(1); } //d=1 is identity and d in (0,1) is shrinking public PolyWedge homothety(double d) { PolyWedge P=new PolyWedge(); P.count=count; Complex Z=getCenter(); for(int i=0;i.0000001) return(0); } return(1); } public static PolyWedge makeWedge(PolyWedge Q0,int i) { int count=Q0.count; PolyWedge Q1=Q0.pivot(i); Complex z0=Q0.z[i]; int i1=(i-1+count)%count; int i2=(i+1)%count; double d=.1; Complex z1=Complex.minus(Q0.z[i1],z0); Complex z2=Complex.minus(Q1.z[i2],z0); z1=Complex.plus(z0,new Complex(d*z1.x,d*z1.y)); z2=Complex.plus(z0,new Complex(d*z2.x,d*z2.y)); PolyWedge W=new PolyWedge(); W.count=3; W.z[0]=new Complex(z0); W.z[1]=new Complex(z1); W.z[2]=new Complex(z2); return(W); } public int isReversed() { int k=Complex.isPositivelyOriented(z[0],z[1],z[2]); return(k); } public int isParallel(int i0,int j0) { int n=this.count; int i1=(i0+n)%n; int j1=(j0+n)%n; int i2=i1; int j2=j1; if(i1==j1) return(0); if(i1>j1) { i2=j1; j2=i1; } int i3=(i2+1)%n; int j3=(j2+1)%n; Complex z1=this.z[i2]; Complex z2=this.z[i3]; Complex z3=this.z[j2]; Complex z4=this.z[j3]; Complex w1=Complex.minus(z1,z2); Complex w2=Complex.minus(z3,z4); Complex w3=Complex.times(w1,w2.conjugate()); double test=Math.abs(w3.y); if(test<.01) return(1); return(0); } public int isParallel() { int n=this.count; for(int i=0;i