//===================================================================== // File: LorenzApplet.java // // Applied Math 303, Term Project // Blair Fraser, 2303725 //===================================================================== import java.applet.Applet; import java.awt.*; import java.lang.*; import java.awt.image.ImageObserver; public class LorenzApplet extends Applet { LorenzCanvas equationCanvas; Button algusnupp=new Button("* Restart *"); Valik vpx, vpy, vpz, vpaxz, vpayz, vpaxy; Juhtpind jpxy=new Juhtpind(this, "pxy"); Juhtpind jpz=new Juhtpind(this, "pz"); Juhtpind jpa1=new Juhtpind(this, "paxy"); Juhtpind jpa2=new Juhtpind(this, "paz"); RPunkt keskus=new RPunkt(0, 0, 0); Frame jrpxy=new Raam("Driving window", this); double px=0, py=0, pz=-20; double paxz=0, payz=0, paxy=0; Color joonevarv=Color.black, taustavarv=Color.white; public void init() { setLayout(new BorderLayout()); //---------------- // Get parameters //---------------- String str = new String(); str = getParameter("initial_x"); double initialx = Double.valueOf(str).doubleValue(); str = getParameter("initial_y"); double initialy = Double.valueOf(str).doubleValue(); str = getParameter("initial_z"); double initialz = Double.valueOf(str).doubleValue(); str=getParameter("initial_time"); double initialtime = Double.valueOf(str).doubleValue(); str = getParameter("time_step"); double stepSize = Double.valueOf(str).doubleValue(); str = getParameter("background"); if(str!=null)taustavarv=varviks(str); if(getParameter("foreground")!=null) joonevarv=varviks(getParameter("foreground")); //---------------------------- // Create the equation canvas //---------------------------- equationCanvas = new LorenzCanvas(); equationCanvas.setInitialState(initialtime, initialx, initialy, initialz); equationCanvas.setTimeStep(stepSize); equationCanvas.seaJoonevarv(joonevarv); equationCanvas.seaTaustavarv(taustavarv); equationCanvas.seaVaatePunkt(px, py, pz); equationCanvas.seaVaateSuund(paxz, payz, paxy); //----------------------------- // Create buttons if nessasary //----------------------------- Panel param51Panel = new Panel(); param51Panel.setLayout(new BorderLayout()); param51Panel.add("Center", new Label("px", Label.RIGHT)); vpx = new Valik(this, "px", -10000, px, 10000, 1); param51Panel.add("East", vpx); vpx.tf.setText(px+""); Panel param52Panel = new Panel(); param52Panel.setLayout(new BorderLayout()); param52Panel.add("Center", new Label("py", Label.RIGHT)); vpy = new Valik(this, "py", -10000, py, 10000, 1); param52Panel.add("East", vpy); vpx.tf.setText(py+""); Panel param53Panel = new Panel(); param53Panel.setLayout(new BorderLayout()); param53Panel.add("Center", new Label("pz", Label.RIGHT)); vpz = new Valik(this, "pz", -10000, pz, 10000, 1); param53Panel.add("East", vpz); vpz.tf.setText(pz+""); Panel param54Panel = new Panel(); param54Panel.setLayout(new BorderLayout()); param54Panel.add("Center", new Label("paxz", Label.RIGHT)); vpaxz = new Valik(this, "paxz", -10, paxz, 10, 0.1); param54Panel.add("East", vpaxz); vpaxz.tf.setText(paxz+""); Panel param55Panel = new Panel(); param55Panel.setLayout(new BorderLayout()); param55Panel.add("Center", new Label("payz", Label.RIGHT)); vpayz = new Valik(this, "payz", -10, payz, 10, 0.1); param55Panel.add("East", vpayz); vpayz.tf.setText(payz+""); Panel param56Panel = new Panel(); param56Panel.setLayout(new BorderLayout()); param56Panel.add("Center", new Label("paxy", Label.RIGHT)); vpaxy = new Valik(this, "paxy", -10, paxy, 10, 0.1); param56Panel.add("East", vpaxy); vpaxy.tf.setText(paxy+""); Panel suurus5=new Panel(); suurus5.setLayout(new GridLayout(2, 3)); suurus5.add(param51Panel); suurus5.add(param52Panel); suurus5.add(param53Panel); suurus5.add(param54Panel); suurus5.add(param55Panel); suurus5.add(param56Panel); //------------------------------------------- // Control Bar Panel, entire user interface. //------------------------------------------- add("South", suurus5); add("Center",equationCanvas); show(); jpxy.seaPilt(getImage(getCodeBase(), "juhtxy.gif")); jpz.seaPilt(getImage(getCodeBase(), "juhtz.gif")); jpa1.seaPilt(getImage(getCodeBase(), "juhtxy.gif")); jpa2.seaPilt(getImage(getCodeBase(), "keerxy.gif")); jrpxy.setLayout(new BorderLayout()); Panel nimed=new Panel(); nimed.setLayout(new GridLayout(2, 1)); nimed.add(new Label("Move")); nimed.add(new Label("Turn")); jrpxy.add("West", nimed); Panel pnxy=new Panel(); pnxy.setLayout(new GridLayout(2, 1)); pnxy.add(jpxy); pnxy.add(jpa1); jrpxy.add("Center", pnxy); Panel pnz=new Panel(); pnz.setLayout(new GridLayout(2, 1)); pnz.add(jpz); pnz.add(jpa2); jrpxy.add("East", pnz); jrpxy.add("South", algusnupp); jrpxy.resize(200, 400); } //===================================================================== // start // // Start the thread. //===================================================================== public void start() { jrpxy.show(); jrpxy.repaint(); equationCanvas.restart(); // thread = new Thread(this); // thread.start(); } //===================================================================== // stop // // Stop the thread. //===================================================================== /* public void stop() { if(thread != null) { thread.stop(); thread = null; } } */ public Color varviks(String s){ Color c=Color.yellow; s=s.toLowerCase(); if(s.equals("white"))c=Color.white; if(s.equals("valge"))c=Color.white; if(s.equals("green"))c=Color.green; if(s.equals("roheline"))c=Color.green; if(s.equals("red"))c=Color.red; if(s.equals("punane"))c=Color.red; if(s.equals("blue"))c=Color.blue; if(s.equals("sinine"))c=Color.blue; if(s.equals("black"))c=Color.black; if(s.equals("must"))c=Color.black; return c; } public String umarda(double arv){ String s=String.valueOf(arv); int komakoht=s.indexOf("."); if((komakoht>0)&&(s.length()-komakoht>3)) s=s.substring(0, komakoht+2); return s; } //===================================================================== // run // // Run the thread, this is the main loop of the applet. //===================================================================== /* public void run() { //equationCanvas.restart(); while(true) { try { thread.yield(); thread.sleep(100); }catch(InterruptedException e) { System.out.println(e.getMessage()); break; } // equationCanvas.increment(); // System.out.println(kord++); // equationCanvas.repaint(); equationCanvas.joonista(nxz, nyz, nxy); nxz+=nkxz; nyz+=nkyz; nxy+=nkxy; if(nxz>7)nxz-=2*Math.PI; if(nyz>7)nyz-=2*Math.PI; if(nxy>7)nxy-=2*Math.PI; if(nxz<-7)nxz+=2*Math.PI; if(nyz<-7)nyz+=2*Math.PI; if(nxy<-7)nxy+=2*Math.PI; if(!vaxz.fookuses)vaxz.tf.setText(umarda(nxz)); if(!vayz.fookuses)vayz.tf.setText(umarda(nyz)); if(!vaxy.fookuses)vaxy.tf.setText(umarda(nxy)); } } */ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height){ if((infoflags & ImageObserver.ALLBITS)!=0){ jrpxy.repaint(); return false; } return true; } //===================================================================== // handle action // // How to handle a button click. //===================================================================== public boolean action(Event evt, Object arg) { if(evt.target instanceof Valik){ if(((Valik)evt.target).ise.equals("px"))px=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.equals("py"))py=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.equals("pz"))pz=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.equals("paxz"))paxz=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.equals("payz"))payz=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.equals("paxy"))paxy=((Double)arg).doubleValue(); if(((Valik)evt.target).ise.substring(0, 1).equals("p")){ equationCanvas.seaVaatePunkt(px, py, pz); equationCanvas.seaVaateSuund(paxz, payz, paxy); } } if(evt.target==algusnupp){ System.out.println("algusnupp"); px=0; py=0; pz=-20; paxz=0; payz=0; paxy=0; equationCanvas.seaVaatePunkt(px, py, pz); equationCanvas.seaVaateSuund(paxz, payz, paxy); vpx.tf.setText(px+""); vpy.tf.setText(py+""); vpz.tf.setText(pz+""); vpaxz.tf.setText(paxz+""); vpayz.tf.setText(payz+""); vpaxy.tf.setText(paxy+""); } if(evt.target==jpxy){ // System.out.println(((Juhtpind)(evt.target)).korguspr); RPunkt muutus=new RPunkt((((Juhtpind)(evt.target)).laiuspr-0.5)*5, -(((Juhtpind)(evt.target)).korguspr-0.5)*5, 0.0); muutus=muutus.keera(paxz, payz, paxy); px+=muutus.x; py+=muutus.y; pz+=muutus.z; vpx.tf.setText(px+""); vpy.tf.setText(py+""); vpz.tf.setText(pz+""); equationCanvas.seaVaatePunkt(px, py, pz); } if(evt.target==jpz){ RPunkt muutus=new RPunkt(0, 0, -(((Juhtpind)(evt.target)).korguspr-0.5)*5); muutus=muutus.keera(paxz, payz, paxy); px+=muutus.x; py+=muutus.y; pz+=muutus.z; vpx.tf.setText(px+""); vpy.tf.setText(py+""); vpz.tf.setText(pz+""); equationCanvas.seaVaatePunkt(px, py, pz); } if(evt.target==jpa1){ RPunkt muutus=new RPunkt(-(((Juhtpind)jpa1).laiuspr-0.5), (((Juhtpind)jpa1).korguspr-0.5), 0); muutus=muutus.keera(paxz, payz, paxy); equationCanvas.seaVaateSuund(paxz+=muutus.x, payz+=muutus.y, paxy+=muutus.z); vpaxz.tf.setText(paxz+""); vpayz.tf.setText(payz+""); } if(evt.target==jpa2){ RPunkt muutus=new RPunkt(0, 0, (((Juhtpind)jpa2).korguspr-0.5)); equationCanvas.seaVaateSuund(paxz+=muutus.x, payz+=muutus.y, paxy+=muutus.z); vpaxy.tf.setText(paxy+""); } /* if(evt.target==jpa2){ double r=(new RPunkt(px, py, pz)).lahuta(keskus).pikkus(); double nurk= ((Juhtpind)jpa2).laiuspr-0.5; RPunkt muutus=(new RPunkt(Math.sin(nurk), 0, 1-Math.cos(nurk))).korruta(r); muutus=muutus.keera(paxz, payz, paxy); equationCanvas.seaVaatePunkt(px+=muutus.x, py+=muutus.y, pz+=muutus.z); muutus=new RPunkt(0, 0, 0).keera(paxz, payz, paxy); System.out.println(muutus+"\n"+paxz); equationCanvas.seaVaateSuund(paxz+=muutus.x, payz+=muutus.y, paxy+=muutus.z); vpaxz.tf.setText(paxz+""); vpayz.tf.setText(payz+""); vpaxy.tf.setText(paxy+""); vpx.tf.setText(px+""); vpy.tf.setText(py+""); vpz.tf.setText(pz+""); }*/ return(false); } public void stop(){ jrpxy.hide(); } } class Raam extends Frame{ Applet ap; public Raam(String nimi, Applet ua){ super(nimi); ap=ua; } public boolean action(Event e, Object arg){ return ap.action(e, arg); } }