weihnachtsbaum

Status
Nicht offen für weitere Antworten.

annawald

Mitglied
Halllo!

Ich muss mit einer for-schleife ein programm schreiben, das mir einen weihnachtsbaum zeichnet. das ganze mit lines. ich habe es schon mit triangle gemacht, aber da sieht es einfachnicht gleichmäßig aus.



kann mir jemand helfen (ich arbeite mit processing)

hier ist der code (mit triangle)

Code:
void setup() {  
  
  size(500, 500);
  
  baum(140, 10, 3);
  
}


void baum(int x, int y, int ebenen) {
  
 int breite = 40;
   fill(#00ff00);
   noStroke();
   
 for(int i = 1; i <= ebenen; i = i + 1) {
  
 triangle(x, y, x + breite, y+100, x-breite, y+100);
  
  y = y + 75;
  breite = breite + 20;
  } 
}

wär schön, wenn mir jemand helfen könnte den umzuschreiben mit "line"

danke
 

Marco13

Top Contributor
Hab' zwar noch nicht selbst mit Processing gearbeitet, aber ... was meinst du mit "gleichmäßig"? Ist der Baum irgendwie verschoben? Ich könnte mir vorstellen, dass man auch die X-Koordinate verändern müßte
Code:
void baum(int x, int y, int ebenen) 
{
....
    for(int i = 1; i <= ebenen; i = i + 1) 
    {
  
        triangle(x, y, x + breite, y+100, x-breite, y+100);
  
        y = y + 75;
        breite = breite + 20;
        [b]x = x - 10;[/b] // Sowas in der Art...
    } 
}
 

annawald

Mitglied
nein, der baum sollte nur aus "line" bestehen (ich glaube in java heißt das DrawLine) und eben nicht aus triangle(dreiecken)

also so wie abbildung 2 und nicht wie abbildung 1;) (natürlich sollten die linien gleichmäßig sein und nicht so wie auf der zeichnung; ich habe das jetzt nur mit paint gemacht ;))

2ikuy6a.jpg


und dann sollte der baum auch grün sein...

hier ist mein neuer code...der ist aber immer noch nicht richtig...
Code:
void setup() {  
  
  size(500, 500);
  
  baum(140, 10, 3);
  
}


void baum(int x, int y, int ebenen) {
  
 int breite = 40;
   
 for(int i = 1; i <= ebenen; i = i + 1) {
   //Spitze
   //rechts
   line(x, y, x + breite, y + 100);
   //links
   line(x - breite, y + 100, x, y);
 
   
 //Rechts waagrecht
 line(x + breite, y + 100, x + breite/2, y + 100);
 //Links waagrecht
 line(y -100, y - breite*5/4, y - breite , y -100 );


  
  y = y + 65;
  breite = breite + 20;
  
 }


 }

also: Die innere Ecke zwischen 2 ebnen ist immer auf dem selben x-Wert, der Y-Wert schrumft um dasselbe pro Ebene. Der Abstand zwischen den Aussenecken einer Ebene wächst ebenfalls um einen bestimmten Wert pro Ebene.

aber wie mache ich das?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
OK, die Überesetzung in Processing überlasse ich dann mal dir :bae:, aber ... so ganz grob überlegt:

Die Spitze und die "Bodenlinie" sollten vermutlich getrennt (außerhalb der Schleife) gezeichnet werden - die sind nämlich so "anders als alle anderen" Stufen. Also im Sinne von
Code:
maleSpitze()
for (alle stufen)
{
    maleStufe();
}
maleBodenlinie();
Das eigentliche Malen der Spitze, was du schon hast, stimmt wohl so in etwa, müßte aber eben aus der Schleife raus.

In den eigentlichen Stufen müßten dann nur immer die beiden Hälften gemalt werden, die wie eine 7 und eine horizontal gespiegelte 7 aussehen.
Ich schreib' mal ein bißchen Pseudocode vor mich hin, ohne groß nachzudenken und ohne Gewähr :D

Code:
void baum(int x, int y, int ebenen) 
{
    int innereBreite = 30;
    int äußereBreite = 50;

    // Die Spitze
    line(x, y, x - äußereBreite, y + 100);
    line(x, y, x + äußereBreite, y + 100);

    y += 100;   
    for(int i = 1; i <= ebenen; i = i + 1) 
    {
        // Die 7
        line(x - äußereBreite, y, x - innereBreite, y);
        line(x - innereBreite, y, x - äußereBreite, y+65);

        // Die gespiegelte 7
        line(x + äußereBreite, y, x + innereBreite, y);
        line(x + innereBreite, y, x + äußereBreite, y+65);

        y = y + 65;
        äußereBreite = äußereBreite + 20;
    }

    // Bodenlinie
    äußereBreite = äußereBreite - 20;
    line(x - äußereBreite, y, x + äußereBreite, y);
}

Häm. So in etwa, vielleicht...
 

spyboot

Bekanntes Mitglied
Sorry dass ich dass Thema nochmal rauskrame: Hätte er nicht einfach erst die Dreiecke mit drawTriangle() zeichnen können und dann mit 1 Pixel in jede Richtung kleineren weißen Dreiecken übermalen können (fillTriangle())?

Oder hab ich da nen Denkfehler?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben