Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Auf­ga­ben

  1. Lies dir das Blatt „Infos zu Me­tho­den in Java“ durch, wenn du es noch nicht bei den Übun­gen zur Zähl­schlei­fe ge­macht hast.

Bei der op­ti­schen Täu­schung von oben möch­ten wir ein­fach etwas aus­füh­ren las­sen (das Zeich­nen eines Qua­dra­tes mit zwei Punk­ten), es gibt also kei­nen Rück­ga­be­wert. Um ein Qua­drat zeich­nen zu kön­nen, brau­chen wir die Po­si­ti­on (Ko­or­di­na­ten der lin­ken obe­ren Ecke), die Hin­ter­grund­far­be und die In­for­ma­ti­on, ob die Krei­se links oder rechts lie­gen.

Die be­nö­tig­ten Typen hast du schon ken­nen ge­lernt: int für eine ganze Zahl (auch Far­ben wer­den durch ganze Zah­len dar­ge­stellt) und boolean für die Wahr­heits­wer­te true und false.

Der Rah­men un­se­rer Me­tho­de sieht also fol­gen­der­ma­ßen aus:

Rahmen der Methode

(Die Va­ria­blen wer­den in der Ent­wick­lungs­um­ge­bung üb­ri­gens un­ter­k­rin­gelt, weil sie in der Me­tho­de noch nicht ge­nutzt wur­den.)

  1. Spei­che­re eine neue Datei unter „wel­len1“ ab.

  2. Schrei­be dann zu­nächst den Rah­men der setup()-Me­tho­de.

  3. Schrei­be den Rah­men der ei­ge­nen Me­tho­de „zeich­ne­Qua­drat“ (s.o.).

  4. Noch sind beide Me­tho­den leer.

  5. Über­le­ge dir mit dei­ner Sitz­nach­ba­rin / dei­nem Sitz­nach­barn, was in der Me­tho­de „zeich­ne­Qua­drat“ pas­sie­ren soll.

Habt ihr es her­aus­ge­fun­den? Dann holt euch das nächs­te Blatt.

Es soll ein Qua­drat an der vor­ge­ge­be­nen Po­si­ti­on mit der vor­ge­ge­be­nen Farbe (weiß oder schwarz) ge­zeich­net wer­den.

In dem Qua­drat sol­len zwei klei­ne Krei­se in der je­weils an­de­ren Farbe ent­we­der links oder rechts ge­zeich­net wer­den. Je nach­dem, ob true (für links) oder false (für rechts) über­ge­ben wird.

Um ein Qua­drat zeich­nen zu kön­nen, fehlt uns noch die Sei­ten­län­ge.

  1. De­kla­riert und in­itia­li­siert eine glo­ba­le Va­ria­ble s für die Sei­ten­län­ge.

Euer Code soll­te bis­her etwa so aus­se­hen:

Code

Bevor wir in der Me­tho­de zeich­ne­Qua­drat() ein Qua­drat zeich­nen las­sen, müs­sen wir die Füll­far­be fest­le­gen.

Dann wird die Me­tho­de für das Zeich­nen eines Recht­ecks mit den nö­ti­gen Wer­ten auf­ge­ru­fen.

Code

  1. Er­gän­ze dein Pro­gramm ent­spre­chend.

Jetzt feh­len noch die bei­den klei­nen Krei­se auf der lin­ken oder rech­ten Seite. Auf wel­cher Seite sie ge­zeich­net wer­den sol­len, legt der Über­ga­be­pa­ra­me­ter links fest. Beim Auf­ruf der Me­tho­de wird ent­we­der true oder false über­ge­ben. Wel­che Farbe sie haben, hängt von der Farbe des Qua­dra­tes ab.

  1. Er­gän­ze den fol­gen­den Satz für un­se­re Ab­bil­dung: „Falls die Farbe des Qua­dra­tes weiß ist, ist die Füll­far­be der Krei­se …, sonst … .“

  2. Er­gän­ze den fol­gen­den Satz: „Falls die Va­ria­ble links den Wert true be­sitzt, dann …, sonst … .“

  3. Wel­che Kon­troll­struk­tur brauchst du hier je­weils?

Wir brau­chen eine Ver­zwei­gung.

Zur Er­in­ne­rung:

Abbildung aus MIT App Inventor

Ab­bil­dung aus MIT App In­ven­tor von Mas­sa­chu­setts In­sti­tu­te of Tech­no­lo­gy [CC-BY-SA-3.0]

Falls die Be­din­gung er­füllt ist (hier: Va­ria­ble links be­sitzt den Wahr­heits­wert true), wird aus­ge­führt, was hin­ter then steht, falls nicht, das was hin­ter else steht.

Ver­zwei­gung

Eine Ver­zwei­gung in Java sieht fol­gen­der­ma­ßen aus:

Verzweigung

In un­se­rem Fall:

Code

oder

Code

Ach­tung

Für eine Zu­wei­sung ge­nügt ein ein­fa­ches Gleich­heits­zei­chen. Möch­te man in der Be­din­gung aber auf Gleich­heit über­prü­fen wie hier, so muss man zwei Gleich­heits­zei­chen schrei­ben.

  1. Schrei­be zu­nächst in deine Me­tho­de zeich­ne­Qua­drat(…) die erste Ver­zwei­gung zur Farbaus­wahl der klei­nen Krei­se. Ver­glei­che, wenn nötig, mit der aus­lie­gen­den Lö­sung.

  2. Für die zwei­te Ver­zwei­gung, die sich um das Zeich­nen der Krei­se küm­mern soll, ist eine Skiz­ze (auf Pa­pier) sehr hilf­reich. Fer­ti­ge eine sol­che Skiz­ze eines Qua­dra­tes mit zwei klei­nen Krei­sen in­ner­halb an. Über­le­ge dir dabei, wel­che Werte die Me­tho­de el­lip­se() je­weils über­ge­ben be­kom­men muss. Nutze des Modus el­lip­se­Mo­de(COR­NERS)1

  3. Schrei­be jetzt mit­hil­fe dei­ner Skiz­ze die Ver­zwei­gung, in der die bei­den klei­nen Krei­se ge­zeich­net wer­den. (In der vor­lie­gen­den Lö­sung wurde als Kreis­durch­mes­ser ein Vier­tel der Sei­ten­län­ge des Qua­dra­tes ge­wählt und der Ein­fach­heit hal­ber wur­den die Krei­se zu­nächst di­rekt an den Qua­dratrand ge­setzt.)

  4. Teste dein Pro­gramm, indem du in der setup()-Me­tho­de zu­nächst die Größe des Fens­ters (z.B. 600 auf 400 Pixel) ein­stellst und dann die Me­tho­de „zeich­ne­Qua­drat()“ mit ver­schie­de­nen Wer­ten auf­rufst.

  5. Ver­glei­che dei­nen Pro­gramm­code mit der aus­lie­gen­den Lö­sung.

  6. Schrei­be jetzt den Rah­men der Me­tho­de al­le­Qua­dra­te(), in der dann die op­ti­sche Täu­schung ge­zeich­net wer­den soll.

  7. Nutze eine Zähl­schlei­fe, um die erste Reihe von Qua­dra­ten zu zeich­nen. Achte dar­auf, dass von Qua­drat zu Qua­drat die Füll­far­be wech­selt, die Po­si­ti­on der Krei­se aber gleich bleibt. Nutze dazu eine Va­ria­ble aktuellefarbe vom Typ int.

  8. Pro­gram­mie­re auch das Zeich­nen der zwei­ten, drit­ten und vier­ten Reihe.

  9. Ver­glei­che mit der aus­lie­gen­den Lö­sung.

  10. ***** Hast du eine Idee, wie wir alle Rei­hen mit­hil­fe einer ver­schach­tel­ten Zähl­schlei­fe zeich­nen las­sen kön­nen? Be­sprich dich mit dei­ner Sitz­nach­ba­rin / dei­nem Sitz­nach­barn und pro­biert eure Ideen aus.

 

Wei­te­re Auf­ga­ben:

  1. Pro­gram­miert das Zeich­nen der grü­nen Trenn­li­ni­en zwi­schen den Rei­hen.

  2. Führt eine Va­ria­ble a für den Ab­stand der Krei­se zum Qua­dratrand ein und sucht einen Wert, für den die op­ti­sche Täu­schung am wir­kungs­volls­ten ist.

  3. Ver­än­dert euer Pro­gramm so, dass die op­ti­sche Täu­schung Ab­stand zu den Rän­dern hat.

  4. Wir haben meh­re­re Male den Wech­sel der Farbe von schwarz auf weiß und um­ge­kehrt be­nutzt. Schrei­be eine Me­tho­de „farb­wech­sel“, der man die Farbe schwarz (0) oder weiß (255) über­ge­ben kann und die die je­weils an­de­re Farbe zu­rück­gibt.

  5. Nutze die Me­tho­de über­all dort in dei­nem Pro­gramm, wo ein Farb­wech­sel statt­fin­det.

  6. Teste dein Pro­gramm und ver­glei­che dann mit der aus­lie­gen­den Lö­sung.

 

1 el­lip­se(x,y,b,h) – (x1|y1) linke obere u. (x2|y2) rech­te un­te­re Ecke des um­schlie­ßen­den Recht­ecks

 

 

Wei­te­re op­ti­sche Täu­schun­gen: Her­un­ter­la­den [odt][541 KB]

Wei­te­re op­ti­sche Täu­schun­gen: Her­un­ter­la­den [pdf][526 KB]

 

Wei­ter zu Mög­li­che Lö­sun­gen