import java.applet.Applet; import java.awt.event.*; import java.awt.*; import java.awt.geom.*; import java.math.*; public class Fundamental { /**This class specifies the fundamental triangle that appears in the outer billiards plane.**/ public Fundamental() { } public static GeneralPath triangle() { PolyWedge P=triangleMain(); GeneralPath gp=P.toGeneralPath(); return(gp); } public static PolyWedge triangleMain() { PolyWedge P=new PolyWedge(); P.count=3; P.z[0]=new Complex(0,1); P.z[1]=new Complex(GoldenRatio.phi(-3),0); P.z[2]=new Complex(GoldenRatio.phi(-1),GoldenRatio.phi(1)); return(P); } public static PolyWedge triangle0() { PolyWedge P=new PolyWedge(); P.count=3; P.z[0]=new Complex(0,1); P.z[1]=new Complex(GoldenRatio.phi(-3),0); P.z[2]=new Complex(2*GoldenRatio.phi(-3),1); return(P); } public static PolyWedge triangle1() { PolyWedge P=new PolyWedge(); P.count=3; P.z[0]=new Complex(0,1); P.z[1]=new Complex(2*GoldenRatio.phi(-3),1); P.z[2]=new Complex(GoldenRatio.phi(-1),GoldenRatio.phi(1)); return(P); } public static boolean inTriangle(Complex z) { GeneralPath gp=triangle(); boolean f=gp.contains(z.x,z.y); return(f); } public static int inTriangleSmall(Complex z) { PolyWedge P=Fundamental.triangleMain(); for(int i=0;i<5;++i) { int[] J={i}; PolyWedge Q=Fundamental.act(J,P); GeneralPath gp=Q.toGeneralPath(); if(gp.contains(z.x,z.y)) return(i); if(gp.contains(2-z.x,z.y)) return(i+5); } return(-1); } public static Complex verticalReflect1(Complex z) { double A=Math.sqrt(5)-2; Complex w=new Complex(2*A-z.x,z.y); return(w); } public static Complex verticalReflect2(Complex z) { Complex w=new Complex(2-z.x,z.y); return(w); } public static PolyWedge verticalReflect2(PolyWedge P) { PolyWedge Q=new PolyWedge(); Q.count=P.count; for(int i=0;i