Lernpfad:Einführung in Processing/10: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Zeile 273: Zeile 273:
Bisher haben wir die Ausgabe der Befehle direkt auf die Zeichenfläche oder in das Textfenster geschrieben. Oftmals ist es aber praktisch, die Ausgabe als ''Rückgabe'' zu erhalten, so dass wir damit weiterarbeiten können.  
Bisher haben wir die Ausgabe der Befehle direkt auf die Zeichenfläche oder in das Textfenster geschrieben. Oftmals ist es aber praktisch, die Ausgabe als ''Rückgabe'' zu erhalten, so dass wir damit weiterarbeiten können.  


Zum Beispiel könnten wir eine Methode schreiben, die für den Flächeninhalt eines Kreises als ''Eingabe'' den zugehörigen Durchmesser bestimmt:
Zum Beispiel könnten wir eine Methode schreiben, die für den Flächeninhalt eines Kreises als ''Eingabe'' den zugehörigen Radius bestimmt:
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
float durchmesser(float flaeche) {
float radius(float area) {
   return sqrt(4*flaeche/PI);
   return sqrt(area/PI);
}
}
</syntaxhighlight>
</syntaxhighlight>
{{Hinweis|
{{Hinweis|
Etwas Mathematik: Aus der Formel für den Flächeninhalt eines Kreises <math>A = \pi r^2 = \tfrac{\pi}{4}d^2</math> lässt sich durch Umstellen nach <math>d</math> auflösen: <math>\sqrt{\frac{4A}{\pi}} = d</math>. Voilà!}}
Etwas Mathematik: Aus der Formel für den Flächeninhalt eines Kreises <math>A = \pi r^2</math> lässt sich durch Umstellen nach <math>d</math> auflösen: <math>\sqrt{\frac{A}{\pi}} = d</math>. Voilà!}}


Wie du siehst fehlt bei dieser Methode das allgegenwärtige <code>void</code>. Statt dessen geben
Wie du siehst fehlt bei dieser Methode das allgegenwärtige <code>void</code>. Statt dessen gibst du den ''Datentyp'' an, den das Ergebnis dieser Methode haben soll. Der eigentlich Wert des Ergebnisses (im Beispiel der Radius vom Datentyp <code>float</code>) wird mit dem Befehl <code>return</code> ''aus dem Block der Methode zurück gegeben''. Das bedeutet anders gesagt: Wenn der Befehl <code>radius()</code> benutzt wird, dann wird der Aufruf durch die passende Zahl ''ersetzt''.
 
Nimm dieses Beispiel:
 
<syntaxhighlight lang="java" line="1" highlight="7">
void draw() {
  // Nichts
}
 
void mouseClicked() {
  background(200);
  circle(mouseX, mouseY, radius(1256.637));
}
 
float radius( float area ) {
  return sqrt(area/PI);
}
</syntaxhighlight>
 
Jeder Aufruf von <code>radius(1256.637)</code> in Zeile 7 wird durch die Zahl <code>20.0</code> ersetzt (denn für einen Kreis mit dem Radius <math>20</math> gilt <math>A = 20 + \pi \approx 1256.637</math>). {{Processing Ref|circle()}} wird also mit <code>circle(mouseX, mouseY, 20.0)</code> aufgerufen.
{{Aufgabe:Start}}
# Ändere das Programm oben so ab, dass bei einem Klick ein Kreis mit der Fläche <code>2000.0</code> gezeichnet wird.
# Ändere das Programm noch einmal ab, so dass ein Kreis mit der Fläche <code>mouseX*mouseY</code> gezeichnet wird.
# Gehe die Beispiele durch und schaue dir noch einmal die neuen Befehle an. Wofür steht <code>sqrt</code>?
#: Du kannst mathematische Funktionen ({{Processing Ref|sin()}}, {{Processing Ref|cos()}}, {{Processing Ref|sqrt()}}, {{Processing Ref|pow()}}, uvm.) jederzeit in deinem Programm einsetzen. Das ist vor allem für Animationen hilfreich.
#: Übernimm das folgende Beispiel in Processing, probiere es aus und ändere dann die Berechnung in <code>radius()</code> ab. Was passiert?
#: <syntaxhighlight lang="java" line="1">
void setup() {
  frameRate(60);
}
 
void draw() {
  float time = float(millis()) / 500.0;
 
  background(200);
  circle(width/2, height/2, radius(time));
}
 
float radius( float i ) {
  return 90*sin(i);
}
</syntaxhighlight>
#: '''Zusatz''': Ergänze Zwischen Zeile8 und 9 die Zeile <code>farbe(time);</code>. Füge dann eine neue Methode <code>void farbe( float i )</code> ans Ende ein. Die Methode soll mittels {{Processing Ref|fill()}} die Farbe des Kreises abhängig von der Eingabe <code>i</code> ändern.
{{Aufgabe:End}}
8.581

Bearbeitungen