Dit is een programmeeropdracht die hoort bij het vak Algoritmiek 2009, dat gegeven wordt aan de Faculteit der Letteren van de Rijksuniversiteit Groningen.
Voor deze opdrachten is begeleiding aanwezig op woensdagen op 9:15-11:00 in zaal 12.0102C.
Deze week zijn er vier opdrachten. Elke opdracht is evenveel punten waard. Test alle programma's die je schrijft en lever de testresultaten in met de programma's.
Zet het temperatuurconversieprogramma van opdracht 12.1 om in een applet die dezelfde taak uitvoert.
Voorbeeld van de werking van het programma:
Schrijf een Java-applet die op een witte achtergrond, een blauwe rechthoek en een rode ovaal laat zien. De blauwe rechthoek moet precies half zo breed en hoog zijn als het frame en gecentreerd worden geplaatst in het frame. Hij moet mee van grootte veranderen als de gebruiker het frame van grootte verandert.
De breedte en hoogte van de rode ovaal moet 1/8 zijn van de breedte en hoogte van het frame. Ook deze waarden moeten mee veranderen als het frame van grootte verandert. De rode ovaal moet steeds als het frame hertekend wordt, op een willekeurige plek in de witte rand worden geplaatst, zonder te overlappen met de rechthoek of buiten het frame te vallen.
De grootte van het frame kan worden bepaald met de method getSize():
// in paint(): Dimension d = getSize(); //old name: size() int breedte = d.width; int hoogte = d.height;
Voorbeeld van de werking van het programma:
Breid het programma MovingDot.java op een zodanige manier uit dat de cirkel niet op zoek gaat naar het punt (0,0) maar een punt dat wordt bepaald door een muisklik van de gebruiker.
Voorbeeld van de werking van de applet:
Gebruik de standaardmethod mouseDown() voor het registreren van muisklikken:
public boolean mouseDown(Event e, int x, int y) {
// eigen code
...
return(true);
}
Schrijf een Java-applet dat op een wit vlak van 200 bij 200 pixels tien gevulde cirkels tekent met een diameter van 20 pixels en willekeurige kleuren. De applet hoeft niet te controleren of de cirkels in het begin overlappen. Nadat de cirkels zijn geplaatst, moeten ze gaan bewegen in stapjes van 1 pixel per 50 milliseconden. Ze moeten zich zodanig bewegen dat ze steeds verder van alle andere cirkels komen te staan zonder dat ze het startvlak van 200 bij 200 verlaten.
Gebruik de volgende formule om de afstand tussen twee punten (x,y) en (a,b) te bepalen:
afstand = sqrt( pow(x-a,2) + pow(y-b,2) )
Voorbeeld van de bewegingen van de cirkels:
Op een lijn liggen 3 cirkels: op posities 10 (A), 20 (B) en 40 (C). Elke cirkel kan twee kanten opgaan: naar links (-1) of naar rechts (+1). Als ze 1 stapje maken waarbij ze steeds verder van de rest komen dan gaat A naar 9 (verder van B en C) en C naar 41 (verder van A en B). Cirkel B gaat naar 21 omdat daardoor de kleinste afstand naar een andere cirkel (A-B) groter wordt.