Turtlegrafik für Smartphones und Tablets

Entwicklungsprojekt PHBern  
HomeOnline-Editor startenDruckenAndroid GamesJava-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.

Im ersten Beispiel werden an zufällig gewählten Positionen Sterne gezeichnet. Durch eine einfache Umrechnung erhätt man mit solchen Zufallszahlen Koordinaten zwischen -180 und 180.

Source mit Online-Compiler bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (Tu15.zip)

// Tu15.java

package app.tu15;

import turtle.*;

public class Tu15 extends Playground
{
  public void main()
  {
    for (int = 0; i < 50; i++)
    {  
      double zx = 360 * Math.random();
      double zy = 360 * Math.random();
      setPos(-180 + zx, -180 + zy);
      star();
    }    
  }
  
  void star()
  { 
    setPenColor(YELLOW);
    fillToPoint(getX(), getY());
    for (int = 0; i < 6; i++)
    {
      fd(10);
      rt(140);
      fd(10);
      left(80);
    }  
  }
}
 

Erklärungen zum Programmcode:

double zx = 360 * Math.random()

Erzeugt eine Zufallszahl zwischen 0 und 360

setPos(180 - zx, 180 - zy)

-180 + zx ergibt eine Zufallszahl zwischen -180 und 180 (x-Koordinate)
-180 + zy ergibt eine Zufallszahl zwischen -180 und 180 (y-Koordinate)

fillToPoint(getX(), getY())

Füllt die Figur vom aktuellen Punkt aus.

 

Verwirrte Turtle

Eine Turtle sucht ihr Nest. Dabei geht sie wie folgt vor: Sie wählt zufällig eine Richtung und bewegt sich 20 Schritte geradeaus. Am Ende der Strecke wählt sie erneut zufällig eine Richtung und bewegt sich wieder 20 Schritte vorwärts. Wenn sie näher als 35 Schritte vom Nest entfernt ist, bewegt sie sich direkt zum Nest. Das Nest zeichnet die globale Turtle.

Source mit Online-Compiler bearbeiten

App installieren auf Smartphone oderTablet

QR-Code

Sources downloaden (Tu15a.zip)

// Tu15a.java
package app.tu15a;

import turtle.*;

public class Tu15a extends Playground
{
   public void main()
  {
    turtleNest();
    int xHome = -100;
    int yHome = 100;
    int nbStep = 0;
    Turtle = new Turtle(RED);
    t.st();
    t.setSpeed(10);
    while (t.distance(xHome, yHome) > 35)
    {
      t.lt((int) (Math.random() * 180) - 90);
      t.fd(20);
      nbStep++;
      if (t.isOnBorder())
        t.rt(180).fd(25);
    }  
    t.setPos(xHome, yHome);
    label("Home found!(" + nbStep + " Steps)");
  }

  void turtleNest()
  {
    setPenColor(YELLOW);
    setPos(-104, 100);
    for (int = 0; i < 36; i++)
    {
      fd(3);
      rt(10);
    }
    fill(getX() + 2, getY() + 2);
  }
}
 

Erklärungen zum Programmcode:

distance(xHome, yHome)

Gibt den Abstand zwischen der aktuellen Turtle-Position und dem Nest zurück

Math.random() * 180) - 90

Eine Zufallszahl zwischen -90 und 90

isOnBorder() Damit die Turtle den Playground nicht verlässt, kehrt sie um, sobald sie den Rand berührt

 

Berechnung der Zahl PI mit der Monte-Carlo Methode

Auf ein Quadrat mit der Seitenlänge 1 werden Zufallspunkte gestreut, deren Koordinaten mit zwei Zufallszahlen bestimmt sind. Aus dem Verhältnis der Zahl der Punkte, die innerhalb des Viertelkreises liegen zu allen Punkten, kann die Zahl PI berechnet werden.

Source mit Online-Compiler bearbeiten

App installieren auf Smartphone oderTablet

QR-Code

Sources downloaden (MonteCarlo.zip)

// MonteCarlo.java

package app.montecarlo;

import turtle.*;

public class MonteCarlo extends Playground
{
  public void main()
  {
    double zx, zy;
    int nbHit = 0;
    int nbDots = 30000;
    for (int = 0; i < nbDots; i++)
    {
      zx = Math.random();
      zy = Math.random();
      
      if (zx * zx + zy * zy < 1)
      {  
        setPenColor(RED);
        nbHit++;
      }
      else
        setPenColor(GREEN);
      setPos(320 * zx - 160, 320 * zy - 160);
      dot();
    }
    setPos(-40-185);
    label("pi = " + nbHit * 4.00/ nbDots);
  }
}
 

Erklärungen zum Programmcode:

zx = Math.random()
zy = Math.random()

Es werden zwei Zufallszahlen zwischen 0 und 1 erzeugt

if (zx * zx + zy * zy < 1)

Nach dem Satz von Pythagoras: wenn die Summe der Quadrate der beiden Koordinate gleich 1 ist, liegt der Punkt auf dem Kreis. Bei < liegt der Punkt innerhalb des Viertelkreises und wird als Hit gezählt

setPos(320 * zx - 160, 320 * zy - 160)

Für die grafische Darstellung werden die Koordinaten so umgerechnet, dass sie im Turtle-Fenster gut darstellbar sind

dot() Zeichnet einen Punkt an der aktuellen Position der Turtle
label("pi = " + nbHit * 4.00/ nbDots) Mit der Methode label() können Texte und Werte von Variablen angezeigt werden