import java.applet.Applet; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Graphics; import java.awt.*; import java.applet.*; import java.lang.Math; public class Test extends Applet implements MouseListener, MouseMotionListener { Screen s=new Screen(300,0,0); int n=5,m=5,iterates=10; double x; Point P,Q; Transform A,B; // A and B generate the tiling boolean model=true; public void init() { s.PoincareModel(); reevaluate(); addMouseMotionListener(this); addMouseListener(this); } void reevaluate(){ // heres some nice formulas try{ double m2=m, n2=n; x=Math.sqrt(Math.cos((1/m2 - 1/n2)*Math.PI)* Math.cos((1/m2 + 1/n2)*Math.PI))/ (Math.cos(Math.PI/m2)*Math.cos(Math.PI/n2)); Transform T=new Transform(x,0); A=new Transform(2*Math.PI/n2); Transform R=new Transform(-2*Math.PI/m2); B=T.dot(R).dot(T); P=new Point(x,0); Q=A.dot(P); } catch (ArithmeticException e) { // This should never happen } } void apply(Graphics g, Point P, Point Q, int num){ s.drawLineSegment(g,P,Q); if (num>0){ apply(g,A.dot(P),A.dot(Q),num-1); apply(g,B.dot(P),B.dot(Q),num-1); } } public void paint(Graphics g) { s.clear(g); g.setColor(Color.black); apply(g,P,Q,iterates); drawMenu(g); } void drawMenu(Graphics g){ g.setColor(Color.white); g.fillRect(530,3,60,12); g.setColor(Color.black); g.drawString("Model",535,13); if (model) { g.setColor(Color.black); g.fillRect(530,15,60,12); g.setColor(Color.white); g.drawString("Poincare",535,25); } else { g.setColor(Color.black); g.fillRect(530,15,60,12); g.setColor(Color.white); g.drawString("Klien",535,25); } g.setColor(Color.white); g.fillRect(10,3,60,24); g.setColor(Color.black); g.drawString("n-gons",15,13); g.drawString("n="+n+" ",25,25); g.fillRect(10,15,12,12); g.fillRect(58,15,12,12); g.setColor(Color.white); g.drawString("+",12,25); g.drawString("-",60,25); g.setColor(Color.white); g.fillRect(10,33,60,24); g.setColor(Color.black); g.drawString("mult",15,43); g.drawString("m="+m+" ",25,55); g.fillRect(10,45,12,12); g.fillRect(58,45,12,12); g.setColor(Color.white); g.drawString("+",12,55); g.drawString("-",60,55); g.setColor(Color.white); g.fillRect(10,63,60,24); g.setColor(Color.black); g.drawString("iterates",12,73); g.drawString("i="+iterates+" ",25,85); g.fillRect(10,75,12,12); g.fillRect(58,75,12,12); g.setColor(Color.white); g.drawString("+",12,85); g.drawString("-",60,85); } void clickMenu(int x,int y){ if ((x>=530)&&(x<=590)&&(y>=15)&&(y<=27)) { model=(! model); if (model) s.PoincareModel(); else s.KlienModel(); repaint(); } if ((x>=10)&&(x<=22)&&(y>=15)&&(y<=27)) { n=n+1; reevaluate(); repaint(); } if ((x>=58)&&(x<=70)&&(y>=15)&&(y<=27)) { n=n-1; reevaluate(); repaint(); } if ((x>=10)&&(x<=22)&&(y>=45)&&(y<=57)) { m=m+1; reevaluate(); repaint(); } if ((x>=58)&&(x<=70)&&(y>=45)&&(y<=57)) { m=m-1; reevaluate(); repaint(); } if ((x>=10)&&(x<=22)&&(y>=75)&&(y<=87)) { iterates=iterates+1; repaint(); } if ((x>=58)&&(x<=70)&&(y>=75)&&(y<=87)) { iterates=iterates-1; repaint(); } } public void mousePressed(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { e.consume(); clickMenu(e.getX(),e.getY()); } }