/* * @(#)Practicum1.java 1.0 03/01/17 * * You can modify the template of this file in the * directory ..\JCreator\Templates\Template_2\Project_Name.java * * You can also create your own project template by making a new * folder in the directory ..\JCreator\Template\. Use the other * templates as examples. * */ import java.awt.*; import java.applet.*; import java.awt.event.*; public class Practicum1 extends Applet implements AdjustmentListener, ActionListener, MouseListener { String error=""; //string die een eventuele foutmelding bevat double x,y,z,mx,my; int max,ox,oy,fx; //x en y coordinaten, z is voor de schaal, Color kleur; //mx en my staan voor middenpunt x en TextField zoom,emax,emx,emy; //middenpunt y Button draw; //max=maximale iteraties Scrollbar effect; //ox en oy zijn oorsprong x en oorsprong y; //de verplaatsing van de tekening, //(om ruimte te maken voor de tekstvakjes en // de 'draw'-knop) //fx is de nr. van het toe te passen effect //kleur van de pixel bepaald door mendelgetal //de textvelden, e staat voor de variabele //waar het vakje betrekking op heeft //(dus emax heeft betrekking op max, enz.) public int ConvInt(String a, int normal, String errmsg) //StringToInt methode+ foutenopvang { int b=0; try{b=Integer.parseInt(a);} catch(Exception e){b=normal; error=errmsg;} finally{return b;} } public double ConvDouble(String a, double normal, String errmsg) //StringToDouble methode+foutenopvang { double b=0; try{b=Double.parseDouble(a);} catch(Exception e){b=normal; error=errmsg;} finally{return b;} } public void adjustmentValueChanged(AdjustmentEvent e) //Scrollbarverandering is effectverandering { fx = effect.getValue()+1; this.repaint(); } public void mouseClicked(MouseEvent e) //als er wordt geklikt IN het output-venster, { //het punt waarop geklikt wordt in het midden double tx,ty; //zetten en inzoomen tx=e.getX()-ox; ty=e.getY()-oy; if (tx>0 && ty<400 && tx<400 & ty>0) { mx=(tx-200)*z+mx; my=(ty-200)*z+my; z=z/2; emx.setText(Double.toString(mx)); emy.setText(Double.toString(my)); zoom.setText(Double.toString(z)); this.repaint(); } } public void init() //initializatie { fx=ConvInt(this.getParameter("fx"),1,""); //standaardeffect z=ConvDouble(this.getParameter("zoom"),.01,""); //standaardzoomfactor max=ConvInt(this.getParameter("max"),100,""); //standaard aantal iteraties ox=10; //coordinaten van linkerbovenhoek plaatje oy=50; mx=ConvDouble(this.getParameter("x"),0,""); //coordinaten van het middenpunt: my=ConvDouble(this.getParameter("y"),0,""); emx = new TextField(Double.toString(mx),10); //initialisatie knop, scrollbar en tekstvakjes emy = new TextField(Double.toString(my),10); emax = new TextField(Integer.toString(max),10); zoom = new TextField(Double.toString(z),10); draw = new Button("Draw"); effect = new Scrollbar(Scrollbar.HORIZONTAL,fx-1,1,0,6); this.add(emx); //neerzetten van knop, scrollbar en tekstvakjes this.add(emy); this.add(draw); this.add(emax); this.add(zoom); this.add(effect); emy.addActionListener(this); //op enter moet ie ook tekenen emax.addActionListener(this); zoom.addActionListener(this); emx.addActionListener(this); effect.addAdjustmentListener(this); //scrollbar actief maken draw.addActionListener(this); //knopje actief maken this.addMouseListener(this); //muis actief maken } public void actionPerformed(ActionEvent e) { mx = ConvDouble(emx.getText(),mx,"Foutieve x-coördinaat gegeven"); //waardes updaten my = ConvDouble(emy.getText(),my,"Foutieve y-coördinaat gegeven"); max = ConvInt(emax.getText(),max,"Foutief aantal iteraties ingevuld"); z = ConvDouble(zoom.getText(),z,"Foutieve zoomfactor gegeven"); this.repaint(); //overnieuw tekenen } private int count() { int c=1; //men begint met 1 iteratie double a=0,b=0,abs,olda; //a en b zijn 0 abs=Math.sqrt(a*a+b*b); //abs is de afstand //(van punt (a,b) tot oorspronng) while (abs<4 && c255) {check=255;} return check; } public void leavemsg(Graphics gr, String s) //soort van statusbalk-updater { gr.setColor(Color.white); //het beeld eerst schoon maken werkt gr.fillRect(2,411+oy,497,29); //vreemd genoeg niet altijd gr.setColor(Color.black); gr.drawString(s,5,430+oy); } public void paint(Graphics g) { int vx,vy,akleur=0,bkleur=0,ckleur=0; //interface tekenen leavemsg(g,"Interface tekenen..."); g.setColor(Color.red); g.drawRect(1,1,498,oy-5); //rechthoek om de tekstvakjes e.d. heen g.drawRect(1,410+oy,498,30); //rechthoek voor 'statusbalk' g.setColor(Color.black); //beschrijvingen: g.drawString("x-coordinaat",10,40); g.drawString("y-coordinaat",110,40); g.drawString("Aantal iteraties",250,40); g.drawString("Zoomfactor",350,40); g.drawString("FX-scroll",450,40); g.setColor(Color.green); g.drawRect(ox-1,oy-1,402,402); //omlijning outputvenster leavemsg(g,"Outputplaatje genereren"); for (vy=0; vy<400; vy++) //(vy staat voor virtuele y coordinaat) { for (vx=0; vx<400; vx++) //onze uitvoer is 400x400 pixels { x=(vx-200)*z+mx; //reële x en y waardes berekenen; -200*z y=(vy-200)*z+my; //zet het midden in de oorsprong, daarna //kan men mx en my goed toepassen akleur = count(); //mendelgetal ophalen switch(fx) //kleureffecten toepassen { case 1: //effect uit de webpagina if (akleur%2==1) akleur=255; else akleur=0; bkleur=akleur; ckleur=akleur; break; case 2: //effect uit de webpagina, alleen andersom if (akleur%2==1) akleur=0; else akleur=255; bkleur=akleur; ckleur=akleur; break; case 3: //zelfgemaakt effectje ckleur=check(akleur%180+20); bkleur=check(akleur%170+30); akleur=check(akleur%10+10); break; case 4: //leuk effectje, soort van combo van 2+3 if (akleur%2==1) bkleur=255; else bkleur=0; if (akleur%4==1) ckleur=255; else ckleur=0; bkleur=check(bkleur-akleur%80); ckleur=check(ckleur-akleur%70); akleur=check(akleur%127); break; case 5: //paars effect ckleur=check(akleur*6+30); bkleur=check(akleur*2); akleur=check(akleur*7+30); break; case 6: //zeer interessant effect int modcolor; modcolor=(int)((x*x+y*y)*13*akleur); ckleur=check((int)(modcolor+akleur)/2+20); bkleur=check(modcolor+20); akleur=check(akleur/2+40); break; } kleur = new Color(akleur,bkleur,ckleur); //kleur definiëren g.setColor(kleur); //kleur vastzetten g.drawRect(vx+ox,vy+oy,1,1); //tekenen! } } //berichtje achterlaten: if (error.equals("")) {leavemsg(g,"Bewerking succesvol");} else {leavemsg(g,error); error="";} } //nodig voor mouselistener: public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }