Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Fr – 20.09.2013 Wald

23. September 2013

Mit den Wissen zu Schleifen und dem Verschieben, Rotieren und Skalieren von Koordinatensystemen, habe ich einen Wald programmiert. Er besteht aus mehreren übereinanderliegenden Ebenen. Das Übereinanderliegen der gezeichneten Ebenen wird im Codetext dadurch erzielt, dass man die Objekte nacheinander auflistet. 1. Himmel mit Farbverlauf 2. Unterholz 3. erste Baumgruppe (in der Mitte des Bildes) 4. zweite Baumgruppe (über die x-Achse verteilt) 5. Reh und Fritz der Jäger Was mich hier gefragt wurde ist, ob ich das Reh und den Fritz als Bild hineingeladen habe. Dem ist nicht so. Sie sind beide mit abgeschrägten Rechtecken und Ellipsen gezeichnet. Dies mag aufwändig erscheinen, doch durch Copy+Paste geht das ziemlich rasch und ich habe damit eine coole Comic-Ästhetik hingekriegt. Bei jedem Klick wiederholt sich der Draw-Vorgang. Das heisst die oberen Punkte 2 - 5 werden nochmals gezeichnet. Die Blätterfarben, Baumstammpositionen, -längen und -farben, Postion von Fritz und dem Reh werden in bestimmten Schrankten zufällig verändert. Hier gibt es noch eine kleine Finesse: Fritz erscheint nur, wenn sein x-Koordinate um einen gewissen Wert kleiner ist, als die vom Reh. So ist er immer hinter dem Reh, um es überhaupt jagen zu können. Download_Wald
//  K O N S T A N T E N

int breite = 1200;                                     // KONST:  Fenstergrösse definieren
int hoehe = 900;

int Y_AXIS = 1;                                        // KONST:  Konstanten für den Himmel-Farbverlauf
color c1, c2;
float x_achste = random(0,breite);

float stamm_min = 10;                                   // KONST:  Dicke vom Baumstamm
float stamm_max = 30;

// S E T U P
void setup()
{
size (breite, hoehe);
smooth();

c1 = color(50,80,150);                               // KONST:  Farben für den Himmel definieren:
c2 = color(220,220,250);

noLoop();
}

// D R A W
void draw() {

// Himmel:
setGradient(0, 0, breite, hoehe, c1, c2, Y_AXIS);

// Unterholz:
for (int i=0; i<=200; i++)
{
noStroke();
fill(50,200,50,100);
ellipse(i*30,hoehe,random(100,200),random(100,200));
}

//BAUMGRUPPE 001:
// Baumstamm:
for(int i=0; i <= 20; i++)
{
float R_anteil = random(30,100);                                        // RGB - Anteile an der Farbe des Baumstamms
float G_anteil = random(20,60);
float B_anteil = random(5,50);

color stamm_farbe = color(R_anteil,G_anteil,B_anteil);                  // Farbe vom Baumstamm
stroke(stamm_farbe);
float stammdicke = random(stamm_min,stamm_max);
strokeWeight(stammdicke);

float baum_spitze = random(2*(hoehe/6),3*(hoehe/6));                    //  wo liegt die Baumspitze -->  y-Achse
float x_achse = random((breite/4),(breite/4)*3);                        //  wo auf der x-Achse liegt der Baumstamm
line(x_achse,hoehe,x_achse,baum_spitze);

// Baumkrone:
noStroke();
float gruen_anteil = random(100,200);                                  // Farbe der Baumkrone
float transp_krone = random(100,200);

float kronen_breite = random(7*stammdicke,9*stammdicke);               // Grösse der Baumkrone
float kronen_hoehe = random(7*stammdicke,20*stammdicke);

fill(50,gruen_anteil,50,transp_krone);
ellipse(x_achse,baum_spitze,kronen_breite, kronen_hoehe);              // leicht transparenter Teil der Baumkrone

ellipse(x_achse+(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),kronen_breite,kronen_breite);
ellipse(x_achse-(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),kronen_breite,kronen_breite);
ellipse(x_achse+(kronen_breite/3),baum_spitze,0.75*kronen_breite,0.75*kronen_breite);
ellipse(x_achse-(kronen_breite/3),baum_spitze,0.75*kronen_breite,0.75*kronen_breite);

fill (0,gruen_anteil,0);                                               // untransparenter Teil der Baumkrone
float skalierungs_zahl = 0.75;
ellipse(x_achse, baum_spitze ,skalierungs_zahl * kronen_breite,skalierungs_zahl * kronen_hoehe);

ellipse(x_achse+(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),skalierungs_zahl * kronen_breite, skalierungs_zahl * kronen_breite);
ellipse(x_achse-(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),skalierungs_zahl * kronen_breite,skalierungs_zahl * kronen_breite);
ellipse(x_achse+(kronen_breite/3),baum_spitze, skalierungs_zahl * 0.75*kronen_breite, skalierungs_zahl * 0.75*kronen_breite);
ellipse(x_achse-(kronen_breite/3),baum_spitze, skalierungs_zahl * 0.75*kronen_breite, skalierungs_zahl * 0.75*kronen_breite);

}

//BAUMGRUPPE 002:
// Baumstamm:
for(int i=0; i <= 20; i++)
{
float R_anteil = random(30,50);
float G_anteil = random(10,25);
float B_anteil = random(5,30);

color stamm_farbe = color(R_anteil,G_anteil,B_anteil);                   // KONST:  Farbe vom Baumstamm
stroke(stamm_farbe);

float stammdicke = random(stamm_min,stamm_max);
strokeWeight(stammdicke);

float baum_spitze = random(4*(hoehe/6),5*(hoehe/6));           //  wo liegt die Baumspitze -->  y-Achse
float x_achse = random(0,breite);                              //  KONST:  wo auf der x-Achse liegt der Baumstamm
line(x_achse,hoehe,x_achse,baum_spitze);

// Baumkrone:
noStroke();
float transp_krone = random(100,200);
float gruen_anteil = random(50,150);
fill(0,gruen_anteil,0,transp_krone);

float kronen_breite = random(7*stammdicke,9*stammdicke);               // Grösse der Baumkrone
float kronen_hoehe = random(7*stammdicke,20*stammdicke);

ellipse(x_achse,baum_spitze,kronen_breite, kronen_hoehe);              // leicht transparenter Teil der Baumkrone

ellipse(x_achse+(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),kronen_breite,kronen_breite);
ellipse(x_achse-(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),kronen_breite,kronen_breite);
ellipse(x_achse+(kronen_breite/3),baum_spitze,0.75*kronen_breite,0.75*kronen_breite);
ellipse(x_achse-(kronen_breite/3),baum_spitze,0.75*kronen_breite,0.75*kronen_breite);

fill (0,gruen_anteil,0);                                               // untransparenter Teil der Baumkrone
float skalierungs_zahl = 0.75;
ellipse(x_achse, baum_spitze ,skalierungs_zahl * kronen_breite,skalierungs_zahl * kronen_hoehe);

ellipse(x_achse+(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),skalierungs_zahl * kronen_breite, skalierungs_zahl * kronen_breite);
ellipse(x_achse-(kronen_breite/3),(baum_spitze + (kronen_hoehe/4)),skalierungs_zahl * kronen_breite,skalierungs_zahl * kronen_breite);
ellipse(x_achse+(kronen_breite/3),baum_spitze, skalierungs_zahl * 0.75*kronen_breite, skalierungs_zahl * 0.75*kronen_breite);
ellipse(x_achse-(kronen_breite/3),baum_spitze, skalierungs_zahl * 0.75*kronen_breite, skalierungs_zahl * 0.75*kronen_breite);

}

// FRITZ und REH

float x_Reh = random(50,breite-50);
float x_Fritz = random(50,breite-50);

if(x_Fritz < (x_Reh-50))
{
//Fritz der Jäger

color hautfarbe = color(255,203,139);
color tarnfarbe1 = color(75,121,26);
color tarnfarbe2 = color(66,103,26);
color tarnhut1 = color(39,75,2);
color tarnhut2 = color(32,57,6);
color tarnhut3 = color(100,129,70);
color nase = color(#AD7D42);

noStroke();

fill(5,5,5);
rect(x_Fritz,hoehe-20,10,20);                                // Stiefel 1
rect(x_Fritz,hoehe-5,13,5,1,3,1,1);
rect(x_Fritz+20,hoehe-20,10,20);                             // Stiefel 2
rect(x_Fritz+20,hoehe-5,13,5,1,3,1,1);

fill(tarnhut1);
rect(x_Fritz,hoehe-40,13,20);                               // Hosenbein 1
rect(x_Fritz+20,hoehe-40,13,20);                            // Hosenbein 2
rect(x_Fritz,hoehe-40,33,5);

fill(tarnfarbe2);
rect(x_Fritz,hoehe-80,33,40,5,1,1,1);                       // Oberkörper

fill(30,30,30);                                             // Gurt
rect(x_Fritz,hoehe-45,33,5);

fill(245,227,30);                                           // Gürtelschnalle
rect(x_Fritz+20,hoehe-45,5,5);
fill(30,30,30);
rect(x_Fritz+21,hoehe-44,2.5,2.5);

fill(tarnfarbe1);                                            // Arm 1
rect(x_Fritz-3,hoehe-80,10,20,5,1,1,3);
rect(x_Fritz,hoehe-70,16,10);

fill(hautfarbe);                                          // Hand 1
rect(x_Fritz+16,hoehe-70,4,8,1,1,3,1);
rect(x_Fritz+16,hoehe-70,7,2,1,1,3,1);

fill(tarnfarbe1);                                            // Arm 2
rect(x_Fritz+33,hoehe-72,8,8,1,1,10,1);

fill(hautfarbe);                                          // Hand 2
rect(x_Fritz+41,hoehe-72,6,4,1,1,20,1);

fill(90,60,20);                                            //  Gewehr, hölzerner Teil
// rect(x_Fritz-8,hoehe-74,8,8,2,1,1,8);                   //  hinterer Teil des Gewehrs
rect(x_Fritz+10,hoehe-76,7,6);
rect(x_Fritz+16,hoehe-78,4,8,6,1,1,1);
rect(x_Fritz+19,hoehe-78,35,6);

fill(180,180,180);                                        // Lauf des Gewehrs
rect(x_Fritz+19,hoehe-78,45,2);

fill(20);                                        // Visier des Gewehrs
rect(x_Fritz+30,hoehe-82,9,2);
rect(x_Fritz+32,hoehe-80,5,2,2,2,2,2);
rect(x_Fritz+60,hoehe-81,2,2);

fill(hautfarbe);
rect(x_Fritz+10,hoehe-105,15,20,1,3,10,1);               // Kopf
rect(x_Fritz+10,hoehe-105,7,25);                         // Hals
rect(x_Fritz+6,hoehe-100,5,5,6,1,1,6);                   // Ohr

fill(255);
ellipse(x_Fritz+15,hoehe-97,4,4);                       // Auge 1
fill(0);
ellipse(x_Fritz+15,hoehe-97,2,2);

fill(255);                                              // Auge 2
ellipse(x_Fritz+25,hoehe-97,4,4);
fill(0);
ellipse(x_Fritz+25,hoehe-97,2,2);

fill(0);                                              // Mund
rect(x_Fritz+15,hoehe-90,8,1.5);

fill(nase);                                            // Nase
rect(x_Fritz+20,hoehe-102,1,7);
rect(x_Fritz+20,hoehe-95,3,1);
rect(x_Fritz+23,hoehe-95,1,3);

fill(0);
rect(x_Fritz+21,hoehe-102,5,1.5);
rect(x_Fritz+12,hoehe-102,5,1.5);

fill(tarnhut1);
rect(x_Fritz+10,hoehe-115,15,10,1,3,1,1);               // Hut
fill(tarnhut2);
rect(x_Fritz+10,hoehe-107,20,3,1,1,3,1);
fill(tarnhut3);
rect(x_Fritz+8,hoehe-115,8,10,10,3,6,6);
rect(x_Fritz+15,hoehe-118,2,2,3,4,1,1);

}

//Reh:

noStroke();

fill(90,21,21);
rect(x_Reh,hoehe-50,10,50,1,1,3,1);                         // Bein 1

fill(90,15,15);
rect(x_Reh+15,hoehe-50,10,50,1,1,3,1);                      // Bein 2

fill(90,21,21);
rect(x_Reh+40,hoehe-50,10,30,1,1,5,1);                      // Bein 3
rect(x_Reh+35,hoehe-30,10,10,3,1,1,1);
fill(0);                                                    // Hufe
rect(x_Reh+34,hoehe-29,3,8,3,1,1,1);

fill(90,15,15);
rect(x_Reh+55,hoehe-50,10,50);                              // Bein 4

fill(90,21,21);
rect(x_Reh,hoehe-100,65,50,9,1,1,1);                // Körper

fill(255,255,255,160);                              // weisser Bauch
rect(x_Reh+10,hoehe-55,30,5,8,1,1,1);
rect(x_Reh+50,hoehe-55,5,5,8,8,1,1);

fill(90,21,21);
triangle(x_Reh+2,hoehe-75,x_Reh+2,hoehe-60,x_Reh-10,hoehe-60);  //Schwänzchen
fill(255,255,255,180);
triangle(x_Reh,hoehe-65,x_Reh,hoehe-60,x_Reh-10,hoehe-60);

fill(90,21,21);
rect(x_Reh+50,hoehe-120,15,20);                     // Hals

rect(x_Reh+50,hoehe-130,20,20,1,20,1,1);             // Kopf
rect(x_Reh+69,hoehe-120,10,10,1,20,20,1);

fill(0);
rect(x_Reh+75,hoehe-120,5,5,20,20,20,20);             // Schnauze

fill(90,21,21);                                      //Ohren
rect(x_Reh+50,hoehe-140,5,10,1,6,1,1);
rect(x_Reh+60,hoehe-140,5,10,1,6,1,1);
fill(255);
rect(x_Reh+50,hoehe-138,2,8,1,6,1,1);
rect(x_Reh+60,hoehe-138,2,8,1,6,1,1);

fill(255);                                          // Auge
ellipse(x_Reh+58,hoehe-125,5,5);
fill(0);
ellipse(x_Reh+58,hoehe-125,2,2);

}

// F U N K T I O N E N

// Wenn die Maus gedrückt wird, wiederholt sich das DRAW:
void mousePressed()
{
redraw();
}

// Funktion für den Himmel-Farbverlauf:
void setGradient(int x, int y, float w, float h, color c1, color c2, int axis ) {

noFill();

if (axis == Y_AXIS) {  // Top to bottom gradient
for (int i = y; i <= y+h; i++) {
float inter = map(i, y, y+h, 0, 1);
color c = lerpColor(c1, c2, inter);
stroke(c);
line(x, i, x+w, i);
}
}
}