/**
* Exemplare dieser Klasse veranlassen Turtles dazu,
* Spuren auf einer Zeichenflaeche zu hinterlassen.
*
* @author Axel Schmolitzky
* Sebastian Klanck
* Tobi
* @version 2021
*/
class Dompteur
{
Turtle _Turtle = new Turtle();
/**
* 'PR1' auf die Zeichenflaeche zeichnen.
*/
public void start()
{
Turtle turtle = new Turtle(50, 100);
turtle.drehe(-90);
turtle.geheVor(60);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(180);
// Ohne Spur zum naechsten Buchstaben bewegen:
turtle.hinterlasseKeineSpur();
turtle.geheZu(100, 100);
// 'R' zeichnen:
turtle.hinterlasseSpur();
turtle.drehe(-90);
turtle.geheVor(60);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(90);
turtle.geheVor(30);
turtle.drehe(180);
turtle.hinterlasseKeineSpur();
turtle.geheVor(15);
turtle.hinterlasseSpur();
turtle.drehe(60);
turtle.geheVor(35);
// Ohne Spur zum naechsten Buchstaben bewegen:
turtle.hinterlasseKeineSpur();
turtle.geheZu(170, 100);
// '1' zeichnen:
turtle.drehe(-60);
turtle.hinterlasseSpur();
turtle.setzeFarbe("rot");
turtle.drehe(-90);
turtle.geheVor(60);
turtle.drehe(-120);
turtle.geheVor(20);
}
/**
* Die Schildkröte Zeichet ein Muster wo nur noch die Gewünschte Anzahl an Ecken angegeben werden muss.
* Angabe sollte größer 0 sein.
* @param anzahEcken Die Anzahl der Ecken die dein N-Ecken haben soll.
*/
public void zeichneNEck(int anzahlEcken)
{
this.zeichneNEck(anzahlEcken, 30);
}
/**
* lässt die Schildkröte ein Muster Zeichnen wo nur noch die gewünschte Anzahl der Ecken
* und kantenlänge übergeben werden muss.
* @param anzahlEcken Die Anzahl der Ecken die dein N-Ecken haben soll.
* @param kantenlaenge Die länge der Kante die die Schildkröte zeichnet.
*/
public void zeichneNEck(int anzahlEcken, int kantenlaenge)
{
this.zeichneNEck(anzahlEcken, kantenlaenge,"schwarz", _Turtle.gibX(),_Turtle.gibY());
}
/**
* Lässt die Schildkröte ein Muster mit geweünschter Anzahl an Ecken, Farbe der Spurr, länge der Kanten
* und die Position wo die Schildkröte startet.
* Angaben sollten größer 0 sein.
* @param anzahEcken Die Anzahl der Ecken die dein N-Ecken haben soll.
* @param kantenlaenge Die länge der Kante die die Schildkröte zeichnet.
* @param farbe Die farbe der Spuren der Schildkröte.
* @param positionX die X Kordinate der Schildkröte
* @param positionY die Y Kordinate der Schildkröte
*/
public void zeichneNEck(int anzahlEcken, int kantenlänge,String farbe,double positionX, double positionY)
{
Turtle tmpTurtle= new Turtle(positionX, positionY);
tmpTurtle.drehe(_Turtle.gibRichtung());
_Turtle.setzeFarbe(farbe);
for(int i = 0; i < anzahlEcken; i++)
{
_Turtle.geheVor(kantenlänge);
_Turtle.drehe(360/anzahlEcken);
}
}
/**
* Lässt die Turtle ein Rosette Zeichnen, wo die winkel, kantenlänge und Anzahl der Ecken novh übergeben werden muss.
* Die Angaben müssen größer 0 sein.
* @param anzahEcken Die Anzahl der Ecken die dein N-Ecken haben soll.
* @param kantenlaenge Die länge der Kante die die Schildkröte zeichnet.
* @param winkel Der Winkel die die N-Ecks von einander abstehen.
*/
public void rosetteZeichnen(double winkel, int anzahlEcken, int kantenlänge)
{
//erstelle eine Turtle.
_Turtle = new Turtle(100,100);
//Winkel um die Sich die Turtle dreht.
double winkelposition = 0;
//for Schleife um die Anzahl der
for (int k = 0;k <=360/winkel; k++)
{
this.zeichneNEck( anzahlEcken, kantenlänge, "rot", 100, 100);
winkelposition = winkelposition + winkel;
_Turtle.drehe(winkelposition);
}
}
/**
* Zeichnet eine Rosette wo die Winkel, die die N-Ecks abstehen und die Ecken
* und die Ecken des N-Ecks noch übergeben werden müssen, diese müssen größer 0 sein.
* @param winkel Der Winkel die die N-Ecks von einander abstehen.
* @@param anzahEcken Die Anzahl der Ecken die dein N-Ecken haben soll.
*/
public void rosetteZeichnen(double winkel, int anzahlEcken)
{
this.rosetteZeichnen(winkel, anzahlEcken, 30);
}
/**
* Zeichnet eine Vorgefertige Rosette wo alle angaben wie die Rosette aussieht schon übergeben wurden.
*/
public void rosetteZeichnen()
{
this.rosetteZeichnen(10, 6, 30);
}
/**
* Zeichnet eine Kochkurve mit gewünschter laenge und Detailgrad.
*/
public void zeichnekochkurve(int detailgrad,double laenge)
{
this.zeichneKochkurve(new Turtle(10, 200), laenge , detailgrad);
}
/**
* Zeichnet eine Kochkurve mit gewünschter laenge und Detailgrad.
* @param turtle die erzeugte Turtle auf einer übergebenen Position die das Bild zeichnet.
* @param kantenlaenge die Laenge die die Turtle laufen soll, muss größer 0 sein.
* @param detailgrad der Detailgrad der in der Kurve auftauchen soll darf nicht kleiner 0 sein.
*/
public void zeichneKochkurve(Turtle turtle, double laenge, int detailgrad)
{
if(laenge <= 0) // wirft Exception fals Wert kleiner gleich 0 ist.
{
throw new IllegalStateException("laenge muss Positiv und größer 0 sein");
}
if(detailgrad < 0) //Wirft Exception fals der Wert kleiner 0 ist.
{
throw new IllegalStateException("Detailgrad muss Positiv und größer 0 sein");
}
if (detailgrad == 0) //abbruchbedingung sobald Detailgrad 0 ist wird die Turtle was was Zeichnen.
{ turtle.geheVor(laenge);
} else
{
zeichneKochkurve(turtle,laenge / 3.0, detailgrad -1);
turtle.drehe(-60.0);
zeichneKochkurve(turtle,laenge / 3.0, detailgrad -1);
turtle.drehe(120.0);
zeichneKochkurve(turtle,laenge / 3.0, detailgrad -1);
turtle.drehe(-60.0);
zeichneKochkurve(turtle,laenge / 3.0, detailgrad -1);
}
}
/**
* Zeichnet einen Baum mit gewuenschter Anzahl und laenge der Aeste.
* @param aeste die aAnzahl der Aeste die der Baum haben soll, muss größer 0 sein
* @param laenge die laenge des Stammes und der Äeste, muss größer 0 sein.
*/
public void zeichneBaum(int aeste, double laenge)
{
this.zeichneBaum(aeste, 200, 200,laenge);
}
/**
* Zeichnet einen Baum an einer bestimmten Position mit gewünschter länge und anzahl der Aeste.
* @param aeste die Anzahl der Aeste die der Baum haben soll, muss größer 0 sein
* @param posX die X Kordinate der Schildkröte
* @param posY die Y Kordinate der Schildkröte
* @param laenge die laenge des Stammes und der Äeste muss größer 0 sein.
*/
public void zeichneBaum(int aeste ,double posX, double posY, double laenge)
{
Turtle turtle = new Turtle(posX,posY);
turtle.drehe(-30);
turtle.setzeFarbe((int)laenge % 13);
if (laenge < 4) // abbruchbedingung
{
return;
}
else
{
zeichneAst(aeste, posX, posY, laenge, 0, turtle);
}
}
public void zeichneAst(int aeste ,double posX, double posY, double laenge,int ast, Turtle turtle)
{
if(ast<aeste)
{
turtle.geheVor(laenge);
turtle.drehe(-120.0/(aeste-1));
zeichneBaum(aeste, turtle.gibX(), turtle.gibY(), laenge/2);
turtle.geheZu(posX,posY);
zeichneAst(aeste, turtle.gibX(), turtle.gibY(), laenge, ast +1, turtle);
}
}
}