Informaticasite van het Lauwers College te Buitenpost                 © R.J. van der Beek
 
  Antwoorden hoofdstuk 4.3 (JavaLogo, animaties)      


1a.
import logotekenap.*;
import java.awt.Font;

public class Opgave1a extends TekenApplet

{	
	double h=0;
	Font f; 
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
		f=new Font("TimesRoman",Font.BOLD,25);
	}
	
		public void tekenprogramma()
	{	
		penUit();
		links(90);
		rechts(h);
		driehoek();
		stap(70,250);
		schrijf("driehoek",f);
		penUit();
	} 
	
	public void driehoek() 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(300);
			rechts(120);
		}
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	h=h+1;
			tekenOpnieuw();
		}
	}
}
1b. Vervang bij antwoord 1a de opdracht h=h+1; (die staat op de één na laatste regel) door h=h-1;
1c.
import logotekenap.*;

public class Opgave1c extends TekenApplet

{	
	double h=0;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		vooruit(h);
		rechthoek();
		penUit();
	} 
	
	public void rechthoek() 
	{
		penAan();
		vulAan(0,0,255);
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vulUit();
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	h=h+0.1;
			tekenOpnieuw();
		}
	}
}
1d. Als je bij antwoord 1c de opdracht vooruit(h); (dat is de eerste regel van de methode tekenprogramma) door rechts(h); vervangt, dan draait de rechthoek om een hoekpunt.
Wil je dat de rechthoek draait om het middelpunt, dan moet je bij het tekenen er van uitgaan dat de cursor in het middelpunt staat en vanuit dat punt de rechthoek tekenen.
Dan hoef je alleen maar de opdracht stap(-200,-20); toe te voegen bij de methode rechthoek, want dan gaat de cursor eerst van het middelpunt naar het hoekpunt linksonder.
Dan wordt het als volgt:

import logotekenap.*;

public class Opgave1d extends TekenApplet

{	
	double h=0;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		rechts(h);
		rechthoek();
		penUit();
	} 
	
	public void rechthoek() 
	{
		penUit();
		stap(-200,-20);
		penAan();
		vulAan(0,0,255);
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vulUit();
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	h=h+0.1;
			tekenOpnieuw();
		}
	}
}
1e. Vervang bij antwoord 1c de opdracht rechts(h); (dat is de eerste regel van de methode tekenprogramma) door stap(h,h);
1f.
import logotekenap.*;

public class Opgave1f extends TekenApplet

{	
	double h=1;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		rechthoek(h);
		penUit();
	} 
	
	public void rechthoek(double h) 
	{
		penUit();
		stap(-20*h,-20*h);
		penAan();
		vulAan(0,0,255);
		vooruit(4*h);
		rechts(90);
		vooruit(40*h);
		rechts(90);
		vooruit(4*h);
		rechts(90);
		vooruit(40*h);
		rechts(90);
		vulUit();
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	h=h+0.01;
			tekenOpnieuw();
		}
	}
}
1g.
import logotekenap.*;

public class Opgave1g extends TekenApplet

{	
	double h=0;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		rechts(h);
		rechthoek();
		penUit();
	} 
	
	public void rechthoek() 
	{
//		eerst van middelpunt naar linker hoekpunt stappen		
		penUit();
		stap(-200,-20);
		penAan();
		vulAan(0,0,255);
//		rechthoek tekenen
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vooruit(40);
		rechts(90);
		vooruit(400);
		rechts(90);
		vulUit();
		penUit();
//		naar middelpunt linker vierkant
		penUit();
		stap(-20,20);
//		zorg voor draaiing linker vierkant
		links(2*h);
//		linker vierkant tekenen
		stap(-20,-20);	
		vierkant();
		stap(20,20);
//		terug draaien
		rechts(2*h);	
//		naar middelpunt rechter vierkant
		penUit();
		stap(440,0);
//		zorg voor draaiing rechter vierkant
		rechts(3*h);
//		rechter vierkant tekenen
		stap(-20,-20);	
		penUit();
		vierkant();
	}
	
	public void vierkant() 
	{
		penAan();
		vulAan(255,0,0);
		for (int i = 1; i <= 4; i ++)
		{
			vooruit(40);
			rechts(90);
		}
		vulUit();
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	h=h+0.1;
			tekenOpnieuw();
		}
	}

}


2a.
import logotekenap.*;

public class Opgave2a extends TekenApplet

{	
	double h=0;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		links(90);
		rechts(h);
		driehoek();
		penUit();
	} 
	
	public void driehoek() 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(200);
			rechts(120);
		}
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	if (h<=180)
			{
				h=h+0.1;
				tekenOpnieuw();
			}
		}
	}
}
2b.
import logotekenap.*;

public class Opgave2b extends TekenApplet

{	
	double h=0;
	int richting=1;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		links(90);
		rechts(h);
		driehoek();
		penUit();
	} 
	
	public void driehoek() 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(200);
			rechts(120);
		}
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	
			if (h>90) { richting=-1;}
			if (h<0) { richting=1;}
			if (richting == 1) { h=h+0.1;} else { h=h-0.1;}
			tekenOpnieuw();
		}
	}
}
2c.
import logotekenap.*;

public class Opgave2c extends TekenApplet

{	
	double z=50;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		maakAnimatieMogelijk();
	}
	
		public void tekenprogramma()
	{	
		penUit();
		stap(0,-200);
		links(90);
		driehoek(z);
		penUit();
	} 
	
	public void driehoek(double z) 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(z);
			rechts(120);
		}
		penUit(); 
	}
	
	public void animatie()
	{	while( animatieLopend()  )
		{ 	if (z<=500)
			{
				z=z+0.1;
				tekenOpnieuw();
			}
		}
	}
}


3a.
import logotekenap.*;

public class Opgave3a extends TekenApplet

{	
	double z;
	InvoerVariabele v;
	
	public void initialiseer()
	{	
		maakTraceMogelijk();
		v = new InvoerVariabele("zijde", 20 ,500 , 200);
		maakZichtbaar(v);
		z=200;
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(200,z*-0.5);
		links(90);
		driehoek(z);
		penUit();
	} 
	
	public void driehoek(double z) 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(z);
			rechts(120);
		}
		penUit(); 
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		z = v.geefWaarde();
		tekenOpnieuw();
	}
}
3b.
import logotekenap.*;

public class Opgave3b extends TekenApplet

{	
	int z=5;
	InvoerVariabele v;
	
	public void initialiseer()
	{	
		v = new InvoerVariabele("aantal driehoeken", 1 ,20 , 5);
		maakZichtbaar(v);
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(-250,0);
		links(90);
		
		for (int d=1;d<=z;d++)
		{
			driehoek();
			stap(0,-30);
		}
	} 
	
	public void driehoek() 
	{
		penAan();
		for (int i = 1; i <= 3; i ++)
		{
			vooruit(30);
			rechts(120);
		}
		penUit(); 
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		z = v.geefWaarde();
		tekenOpnieuw();
	}
}
3c.
import logotekenap.*;

public class Opgave3c extends TekenApplet

{	
	int z=5;
	InvoerVariabele v;
	
	public void initialiseer()
	{	
		v = new InvoerVariabele("aantal hoeken", 3 ,50 , 5);
		maakZichtbaar(v);
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(-250,0);
		nhoek();
	} 
	
	public void nhoek() 
	{
		penAan();
		for (int i = 1; i <= z; i ++)
		{
			vooruit(30);
			rechts(360/z);
		}
		penUit(); 
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		z = v.geefWaarde();
		tekenOpnieuw();
	}
}


4a.
import logotekenap.*;

public class Opgave4a extends TekenApplet

{	
	int z=5;
	InvoerVariabele v;
	
	public void initialiseer()
	{	
		v = new InvoerVariabele("aantal hoeken", 3 ,50 , 5);
		maakZichtbaar(v);
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(-250,0);
		nhoek();
	} 
	
	public void nhoek() 
	{
		penAan();
		for (int i = 1; i <= z; i ++)
		{
			vooruit(50);
			rechts(360/z);
		}
		penUit(); 
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		z = v.geefWaarde();
		tekenOpnieuw();
	}
}
4b.
import logotekenap.*;

public class Opgave4b extends TekenApplet

{	
	int x=0,y=0;
	InvoerVariabele v,w;
	
	public void initialiseer()
	{	
		v = new InvoerVariabele("hoeveel naar boven (beneden)", -200 ,200 , 0);
		maakZichtbaar(v);
		w = new InvoerVariabele("hoeveel naar rechts (links)", -200 ,200 , 0);
		maakZichtbaar(w);
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(x,y);
		vierkant();
	} 
	
	public void vierkant() 
	{
		penAan();
		for (int i = 1; i <= 4; i ++)
		{
			vooruit(50);
			rechts(90);
		}
		penUit(); 
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		if (iv==v)
		{
			y = v.geefWaarde();
			tekenOpnieuw();
		}
		else
		{
			x = w.geefWaarde();
			tekenOpnieuw();
		}
	}
}


5a.
import logotekenap.*;

public class Opgave5a extends TekenApplet

{	
	double x=0,y=0;
	
	public void initialiseer()
	{	
		maakMuisActieMogelijk();
	}
	
	public void tekenprogramma()
	{	
		penUit();
		stap(x,y);
		vierkant();
	} 
	
	public void vierkant() 
	{
		penAan();
		vulAan(255,0,0);
		for (int i = 1; i <= 4; i++)
		{
			vooruit(100);
			rechts(90);
		}
		penUit();
		vulUit();
	}
	
	public void muisSleepActie() 
	{	x = x + geefSleepdx();
		if (x>100) {x=100;}
		if (x<-100) {x=-100;}
  		y = y + geefSleepdy();
  		if (y>100) {y=100;}
  		if (y<-100) {y=-100;}
  		tekenOpnieuw();
	}
}
5b.
import logotekenap.*;

public class Opgave5b extends TekenApplet

{	
	double h=0;
	
	public void initialiseer()
	{	
		maakMuisActieMogelijk();
	}
	
	public void tekenprogramma()
	{	
		penUit();
		rechts(h);
		driehoek();
	} 
	
	public void driehoek() 
	{
		penAan();
		vulAan(255,0,0);
		for (int i = 1; i <= 3; i++)
		{
			vooruit(200);
			rechts(120);
		}
		penUit();
		vulUit();
	}
	
	public void muisSleepActie() 
	{	h = h + geefSleepdx();
  		h = h + geefSleepdy();
  		tekenOpnieuw();
	}
}


6a.
import logotekenap3d.*;

public class Opg6a extends TekenApplet3D
{
	int h=30;
	InvoerVariabele v;
	
	public void initialiseer()
	{	
		v = new InvoerVariabele("aantal graden draaien", -360 ,360 , 30);
		maakZichtbaar(v);
	}

		
	public void tekenprogramma()
	{	xdraai(30);	ydraai(h);
		
		//voorvlak
		vulAan("oranje");
		stapy(100);stapx(100);stapy(-100);stapx(-100);
		vulUit();
		
		//benedenvlak
		vulAan("blauw");
		stapx(100);stapz(100);stapx(-100);stapz(-100);
		vulUit();
		
		//linkervlak
		vulAan("groen");
		stapz(100);stapy(100);stapz(-100);stapy(-100);
		vulUit();
		
		 //tussenstap naar rechts
		stapx(100);
		
		//rechtervlak
		vulAan("geel");
		stapy(100);stapz(100);stapy(-100);stapz(-100);
		vulUit();
		
		//tussenstap naar achteren
		stapz(100); 
		
		//achtervlak
		vulAan("zwart");
		stapy(100);stapx(-100);stapy(-100);stapx(100);
		vulUit();
		
		//tussenstap naar boven
		stapy(100); 
		
		//bovenvlak
		vulAan("rood");
		stapz(-100);stapx(-100);stapz(100);stapx(100);
		vulUit();
	}
	
	public void invoerVarActie(InvoerVariabele iv)
	{	
		h = v.geefWaarde();
		tekenOpnieuw();
	}

}
6b.
import logotekenap3d.*;
import java.awt.Polygon;

public class Opg6b extends TekenApplet3D

{
	int h=0;
	Polygon vlak1;
	boolean gekliktop1=false;
	
	public void initialiseer()
	{
		maakMuisActieMogelijk(); 
	}
		
	public void tekenprogramma()
	{	xdraai(30);	ydraai(30);
		
		//voorvlak
		vulAan("oranje");
		stapy(100);stapx(100);stapy(-100);stapx(-100);
		vulUit();
		vlak1 = geefVlak();
		
		//benedenvlak
		vulAan("blauw");
		stapx(100);stapz(100);stapx(-100);stapz(-100);
		vulUit();
		
		//linkervlak
		vulAan("groen");
		stapz(100);stapy(100);stapz(-100);stapy(-100);
		vulUit();
		
		 //tussenstap naar rechts
		stapx(100);
		
		//rechtervlak
		vulAan("geel");
		stapy(100);stapz(100);stapy(-100);stapz(-100);
		vulUit();
		
		//tussenstap naar achteren
		stapz(100); 
		
		//achtervlak
		vulAan("zwart");
		stapy(100);stapx(-100);stapy(-100);stapx(100);
		vulUit();
		
		//tussenstap naar boven
		stapy(100); 
		
		//bovenvlak
		vulAan("rood");
		stapz(-100);stapx(-100);stapz(100);stapx(100);
		vulUit();
		
		//tussenstap
		stap(-100,-100,-100);
		
		// voorvlak gedraaid
		if (gekliktop1)
		{	xdraai(h);
			vulAan("oranje");
			stapy(100);stapx(100);stapy(-100);stapx(-100);
			vulUit();
			vulAan("zwart");
			stapx(100);stapy(100);stapx(-100);stapy(-100);
			vulUit();
		}
	}
	
	public void muisDrukActie()
	{ 	int x = geefDrukx();
	  	int y = geefDruky();
	  	gekliktop1 = vlak1.contains(x,y);
	  	if (gekliktop1==false) {h=0;}
	}
	
	public void muisSleepActie() 
	{	if (gekliktop1) {h = h - geefSleepdy();}
  		tekenOpnieuw();
	}
}


7a. InvoerVariabele v;
b. v = new InvoerVariabele("hoeveel", -200 ,200 , 0);
c. maakZichtbaar(v);
d. if (z>10) {h=90;}
e. if (z==10) {h=90;} else (h=100;}