Untitled
unknown
plain_text
3 years ago
8.8 kB
27
Indexable
/** * 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); } } }
Editor is loading...