Vorige | Home | Translate

 

Algoritmiek: Opdracht 13

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.

Opdracht 13.1

Zet het temperatuurconversieprogramma van opdracht 12.1 om in een applet die dezelfde taak uitvoert.

Voorbeeld van de werking van het programma:

ex12a

Opdracht 13.2

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:

ex13b

Opdracht 13.3

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:

  1. De applet wordt gestart. De cirkel wordt op een willekeurige plek geplaatst. Verder gebeurt er niets
  2. De gebruiker klikt in het frame. De cirkel beweegt zich in kleine stappen naar dit punt
  3. De cirkel bereikt het aangeklikte punt en blijft daar stilstaan
  4. De gebruiker klikt op een tweede punt. De cirkel beweegt zich in kleine stappen naar dit punt
  5. Nog voordat de cirkel op de bestemming arriveert, klikt de gebruiker op een derde punt. De beweging van de cirkel verandert van richting en gaat naar dit derde punt
  6. De cirkel arriveert op het derde punt en blijft daar stilstaan

Gebruik de standaardmethod mouseDown() voor het registreren van muisklikken:

public boolean mouseDown(Event e, int x, int y) {
   // eigen code
   ...
   return(true);
}

Opdracht 13.4

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.


Plaats de programma's en de testresultaten in 1 tekstbestand (bijvoorbeeld met het programma kile of notepad). Voeg je naam en je studienummer toe aan dit bestand en geef het bestand de naam nummer opdracht, streepje, jouw studienummer, .txt , bijvoorbeeld: 13-1234567.txt . Plaats de bestanden op Nestor in Algoritmiek - Assignments - opdracht 13, als attachment. De deadline voor het inleveren van de opdracht is maandag 14 december 2009, 23:59.


Antwoorden
Last update: December 16, 2009. erikt(at)xs4all.nl