Turtle-Grafik mit Java

Forschungsprojekt PHBern  
HomeOnline-Editor startenPython TurtlegrafikAndroid TurtlegrafikJava-Online

Zufallszahlen verwenden


Zufallszahlen werden häufig bei Simulationen und verschiedenen Verfahren der Statistik verwendet. Auch in der Turtlegrafik kann man mit Hilfe von Zufallszahlen interessante Applikationen programmieren. Die Methode Math.random() liefert eine dezimale Zufallszahl zwischen 0 und 1 (wobei die Zahl 1 nie vorkommen kann, da die Zahl mit 0, ... beginnt).

Im ersten Beispiel werden an zufällig gewählten Positionen Sterne gezeichnet. Durch eine einfache Umrechnung erhält man mit Hilfe von Zufallszahlen zufällige x- und y-Koordinaten zwischen -180 und 180, die für die Positionierung der Sterne in einem Turle-Fenster sinnvoll sind.

Beispiel zeigen

Beispiel im Online-Editor bearbeiten

 


// Tu13.java

import ch.aplu.turtle.*;
import java.awt.Color;

class Tu13
{
  Turtle = new Turtle();

  Tu13()
  {
    t.hideTurtle();
    t.clear(Color.blue);
    t.setPenColor(Color.yellow);
    for (int = 0; i < 50; i++)
    {
      double = -180 + 360 * Math.random();
      double = -180 + 360 * Math.random();
      star(x, y);
    }
  }

  void star(double x, double y)
  {
    t.setPos(x, y);
    t.fillToPoint(x, y);
    for (int = 0; i < 6; i++)
    {
      t.forward(10);
      t.right(140);
      t.forward(10);
      t.left(80);
    }
  }

  public static void main(String[] args)
  {
    new Tu13();
  }
}
 

Erklärungen zum Programmcode:
clear(Color.blue)

Der Hintergrund wird mit der blauen Farbe gefärbt

double x = -180 +  360 * Math.random()
double y = -180 +  360 * Math.random()

Math.random() liefert eine Zahl zwischen 0 und 1 mit 16 Dezimalstellen, wobei die Ziffern zufällig sind (z.Bsp. 0.7290853765438503). Damit wir zufällige Koordinaten, die in ein Turtle-Fenster passen, erhalten, multiplizieren wir diese Zahlen mit 360. So ergibt sich eine Zahl zwischen 0 und 360. Durch Addition von -180 erhalten wir Koordinaten zwischen -180 und 180

star(x, y)

Aufruf der Methode star mit den Variablenwerten x, y

setPos(x, y)

Die Turtle wird vor dem Zeichnen des Sterns an eine zufällige Position (x, y) versetzt

fillToPoint(x, x)

Die Turtle beginnt jeweils an der Position (x, y) ein neues Stern zu zeichnen. Die Methode fillToPoint() füllt die Stern-Figur von diesem Punkt aus

 

Im zweiten Beispiel werden mit Hilfe von Zufallszahlen die Stiftfarbe, Länge der gezeichneten Strecke und die Bewegungsrichtug der Turtle festgelegt. So entstehen kleine Kunstwerke.

Eine zufällige Farbe wird erzeugt, indem man für den rot-, blau- und grün-RGB-Wert eine ganzzahlige Zufallszahl zwischen 0 und 255 wählt:
Color c = new Color((int)(Math.random() * 255),
                               (int)(Math.random() * 255),
                               (int)(Math.random() * 255));

Beispiel zeigen

Beispiel im Online-Editor bearbeiten


// Tu14.java

import ch.aplu.turtle.*;
import java.awt.Color;

class Tu14
{
  Turtle = new Turtle();

  Tu14()
  {
    t.speed(-1);
    t.wrap();
    t.fillToPoint(0, 0);
    for (int = 0; i < 200; i++)
    {
      Color = new Color((int)(Math.random() * 255),
                          (int)(Math.random() * 255), 255);
      t.setPenColor(c);
      if (Math.random() < 0.5)
        t.right(90);
      else
        t.left(90);
      t.forward(60 * Math.random());
    }
    t.hideTurtle();
  }

  public static void main(String[] args)
  {
    new Tu14();
  }
}
 


Erklärungen zum Programmcode:
wrap()

Wenn die Turtle am Rand des Fensters ankommt, wird sie automatisch auf den gegenüber liegenden Rand des Fensters versetzt (Torussymmetrie)

Color c = new Color((int)(Math.random() * 255),
                                (int)(Math.random() * 255), 
                                255);
(int) wandelt eine Dezimalzahl in eine ganze Zahl um, indem die Dezimalstellen abgeschnitten werden.
Die Blau-Komponente wird nicht zufällig gewählt, sondern bekommt den höchst möglichen Wert 255. Dadurch erhalten wir eine Grafik, in welcher die blauen Farben überwiegen

if (Math.random() < 0.5)
   right(90);
else
   left(90);

Im Mittel sind 50% der Zufallszahlen kleiner als 0.5 sind, d.h. etwa in Hälfte aller Fälle dreht die Turtle um 90° nach rechts, andernfalls nach links

forward(60 * Math.random()) Die Turtle bewegt sich vorwärts um eine Strecke, die eine zufällige Länge zwischen 0 und 60 hat