Rekursion

Hi.

Am einfachsten wäre es, wenn du die Farbe bei jedem Aufruf der Funktion mit übergibst:
Java:
static void zeichnePythagorasBaum(double n, int color) {
  ...
  zeichnePythagorasBaum(n*0.5*Math.sqrt(3), (color + 1) % 8);
  ....
}
So wird für unterschiedliche Rekursionstiefen eine andere Farbe verwendet und die Farbe wird "automatisch" wieder zurückgesetzt wenn die Teil-Rekursion abgeschlossen ist (da die Variable color in der Funktion nie geändert wird).

Gruß
 
Ja mach ich auch.

Code:
static void zeichneQuadrat(double n){
 	  
      for(int i=0;i<4;i++){
         Turtle.forward(n);
         Turtle.right(90);
      }
   }
   static void zeichnePythagorasBaum(double n,int color){
	   Turtle.setColor(color);
      zeichneQuadrat(n);
      if(n>1){
         Turtle.forward(n);   
         Turtle.left(30);
         zeichnePythagorasBaum(n*0.5*Math.sqrt(3),(color + 1) % 8);
 		  
         Turtle.right(90);
         Turtle.forward(n*0.5*Math.sqrt(3));
         zeichnePythagorasBaum(n/2,(color + 1) % 8);
         
         Turtle.forward(-n*0.5*Math.sqrt(3));
         Turtle.left(60);
         Turtle.forward(-n);
 
      }
   }

Hast du das so gemeint?
sieht folgend aus:
fraktal3dm9.jpg


Also hat es da auch noch irgendwas.Da wird eine Seite Übermalt denk ich.
 
Hi.
Hast du das so gemeint?
Ja, genau.
sieht folgend aus:
fraktal3dm9.jpg


Also hat es da auch noch irgendwas.Da wird eine Seite Übermalt denk ich.
Ja, sieht ja schon ganz gut aus.

Allerdings hab ich etwas Unsinn erzählt, die Farbe setzt sich nicht von allein zurück.
Du mußt nach jedem Aufruf der zeichnePythagorasBaum Methode wieder
Java:
Turtle.setColor(color);
aufrufen.

Gruß

PS: Alternativ könntest du ja den Stift auch absetzen wenn du nichts zeichnen willst.

PPS: Ich hab's grad mal mit Absetzen vom Stift implementiert. Siehe Anhang.
 

Anhänge

  • Screenshot-Turtle Graphics.png
    Screenshot-Turtle Graphics.png
    12,9 KB · Aufrufe: 58
Zuletzt bearbeitet:
Also ich habs eingefügt wie du gesagt hast aber stimmt noch immer nicht ganz aber fast.

fraktal4jp9.jpg


Übermalt mir den letzten Strich des Quadrats mit einer andere Farbe.
Möchte es gerne ohne absetzen schaffen.
Was mach ich da noch falsch? seltsam das er das auch nur beim ersten Quadrat macht.
 
Code:
static void zeichneQuadrat(double n){
 	  
      for(int i=0;i<4;i++){
         Turtle.forward(n);
         Turtle.right(90);
      }
   }
   static void zeichnePythagorasBaum(double n,int color){
	   Turtle.setColor(color);
      zeichneQuadrat(n);
      if(n>1){
         Turtle.forward(n);   
         Turtle.left(30);
         zeichnePythagorasBaum(n*0.5*Math.sqrt(3),(color + 1) % 8);
 		 Turtle.setColor(color); 
         Turtle.right(90);
         Turtle.forward(n*0.5*Math.sqrt(3));
         zeichnePythagorasBaum(n/2,(color + 1) % 8);
         Turtle.setColor(color); 
         Turtle.forward(-n*0.5*Math.sqrt(3));
         Turtle.left(60);
         Turtle.forward(-n);
      }
   }
 
Eigentlich ist das ja schon richtig. Du zeichnest immer in der aktuellen Farbe der Rekursionstiefe. Da aber auch Schritte notwendig sind, die nur zum Bewegen des Stifts führen sollen, muss man doch etwas tricksen, damit man die eben gezeichnete Linie mit genau der gleichen Farbe überschreibt.

Probier's mal so:
Java:
static void zeichnePythagorasBaum(double n,int color){
	   Turtle.setColor(color);
      zeichneQuadrat(n);
      if(n>1){
         Turtle.forward(n);   
         Turtle.left(30);
         zeichnePythagorasBaum(n*0.5*Math.sqrt(3),(color + 1) % 8);

         Turtle.right(90);
         Turtle.forward(n*0.5*Math.sqrt(3));
         zeichnePythagorasBaum(n/2,(color + 1) % 8);

         Turtle.forward(-n*0.5*Math.sqrt(3));
         Turtle.left(60);
         Turtle.setColor(color); 
         Turtle.forward(-n);
      }
Gruß
 
Ah danke jetzt funktioniert eigentlich alles richtig nur beim aller ersten Quadrat übermalt er noch die letzte(linke) Seite mit einer falschen Farbe.
Verstehe ich nicht ganz warum.
 
Zurück