Turtle-Grafik mit Java

Forschungsprojekt PHBern  
HomeOnline-Editor startenDruckenAndroid TurtlegrafikJava-Online

Farben verwenden


Die Farben können mit folgenden Methoden geändert werden:
  • Turtle-Farbe: setColor(Color.red)
  • Stiftfarbe: setPenColor(Color.red)
  • Füllfarbe: setFillColor(Color.red)

Damit man in diesen Methoden Farben verwenden kann, muss mit
import  java.awt.Color;
die Java-Klasse Color importiert werden.

Es gibt vordefinierte Farbwerte: Color.black, Color.blue, Color.cyan, Color.dkgray, Color.green, Color.gray, Color.ltgray, Color.magenta, Color.pink, Color.red, Color.white und Color.yellow.

Man kann aber auch jeden beliebigen Farbton definieren, indem man den rot-, grün- und blau-Anteil als eine ganze Zahl zwischen 0 und 255 angibt. Z. Bsp.:
Color c = new Color(120, 200, 80);
joe.setColor(c);

 


Im ersten Beispiel zeichnet die Turtle zuerst eine Figur. Danach wird das geschlossene Gebiet ausserhalb dieser Figur rot gefärbt. Für diese Füllen (sogennantes flood fill) können zwei Methoden verwendet werden:
fill() füllt die geschlossenen Fläche, in der sich die Turtle befindet. Es ist darauf zu achten, dass sich die Turtle nicht auf der Randlinie befindet.
fill(x, y) füllt die geschlossene Fläche, in der sich der Punkt mit den Koordinaten (x, y) befindet.

Beispiel zeigen

Beispiel im Online-Editor bearbeiten

// Tu4a.java

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

class Tu4a
{
  Turtle joe = new Turtle();

  Tu4a()
  {
    joe.setPos(-5050);
    joe.setColor(Color.red);
    joe.setPenColor(Color.red)
    for (int k = 0; k < 4; k++)
    {
      for (int i = 0; i < 3; i++)
      {
        joe.forward(100);
        joe.right(90);
      }
      joe.left(180);
    }
    joe.setFillColor(Color.red);
    joe.fill(-6060);
    joe.hideTurtle();
  }

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

Erklärungen zum Programmcode:

import  java.awt.Color Dieser Import ist immer notwendig, wenn mit Farben gearbeitet wird.
setColor (Color.red) Setzt die Turtlefarbe auf rot
setPenColor (Color.red) Setzt die Stiftfarbe auf rot
setFillColor (Color.red) Setzt die Füllfarbe auf rot
fill ( - 60 ,  60 ) Die Fläche, in der sich der Punkt mit den Koordinaten befindet, wird ausgefüllt
hideTurtle() Die Turtle wird unsichtbar

 


Im zweiten Beispiel werden die Flächen fortlaufend während des Zeichnens gefärbt. Dazu stehen folgende Methoden zur Verfügung:

  • fillToPoint(x, y)
    Am Punkt (x, y) wird so zu sagen ein Gummiband befestigt, dass die Turtle mitzieht. Dabei werden alle Punkte, über die sich das Gummiband bewegt fortlaufend eingefärbt
  • fillToHorizontal(y)
    Füllt fortlaufend die Flächen zwischen der Turtlespur und der waagrechten Linie (y = konstant)
  • fillToVertical(x)
    Füllt fortlaufend die Flächen zwischen der Turtlespur und der senkrechten Linie (x = konstant)

Die Füllfarbe ist dabei gleich der aktuellen Stiftfarbe.

Beispiel zeigen

Beispiel im Online-Editor bearbeiten

 

// Tu4b.java

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

class Tu4b
{
  Turtle = new Turtle();
  
  Tu4b()
  {
    t.speed(-1);
    t.setPenColor(Color.yellow);
    t.setPos(-100, 100);
    t.fillToPoint(-75, 75);
    for (int = 0; i < 6; i++)
      t.fd(60).rt(140).fd(60).lt(80);  
    
    t.setPenColor(Color.green);
    t.rt(30);
    t.setPos(-180-150);
    t.fillToHorizontal(-100);    
    for (int = 0; i < 3; i++)
      t.fd(120).rt(120).fd(120).lt(120);
    
    t.setPenColor(Color.red);
    t.fillToVertical(100);
    t.home();
    t.rt(45);
    t.fd(250);
  }
  
  public static void main(String[] args)
  {
    new Tu4b();
  }
}
 

Erklärungen zum Programmcode:

speed(-1) speed(-1) bewirkt das Zeichnen ohne Animation. Turtle ist zwar sichtbar, zeichnet aber schnell

fillToPoint(-75, 75)
for (int i = 0; i < 6; i++)
      t.fd(60).rt(140).fd(60).lt(80);  

Diese Methode muss vor dem Zeichnen einer Figur aufgerufen werden. Der Punkt (-75, 75) bendet sich innerhalb des nachfolgend gezeichneten Sterns
fillToHorizontal(-100) Gefüllt werden trapezförmige Flächen zwischen der gezeichneten Figur und der waagrechten Gerade mit y = -100
fillToVertical(100) Gefüllt werden trapezförmige Flächen zwischen der gezeichneten Figur und einer senktrechten Gerade mit x = 100. Es spielt keine Rolle, ob sich die Turtle links oder rechts von der Geraden
home() Turtle wird an die Position (0, 0) mit der Richtung nach oben gesetzt

 

Im dritten Beispiel wird beim Zeichnen von gefüllten Figuren die Methode wrap() verwendet. Diese bewirkt, dass die Turtle nach dem Verlassen des Turtle-Fensters auf der gegenüber liegenden Seite wieder im Fenster erscheint und das Zeichnen fortsetzt. Das Füllen erfolgt weiterhin zum gleichen Punkt.

Beispiel zeigen

Beispiel im Online-Editor bearbeiten

 
// Tu4c.java

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

public class Tu4c
{
  Turtle = new Turtle();

  public Tu4c()
  {
    t.wrap();
    t.speed(-1);
    t.setColor(Color.red);
    t.fillToPoint(100, 0);
    t.setPenColor(Color.red);
    t.setPos(-50, 0);
    for (int = 0; i < 120; i++) 
      t.fd(8).rt(3);
  }

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

Erklärungen zum Programmcode:

wrap() Die Turtle wird in den Wrap-Modus versetzt

 

Aufgaben