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.

Lektion 2

Lektion 2

Beispiel 5 - Framework Dies Beispiel produziert das selbe Resultat wie Beispiel 4, doch der Kode ist ein bisschen anders. Der Kode ist in 2 Funktionen gepackt. Diese Funktionen sind speziell in dem Sinne, dass sie von Processing aufgerufen werden. Die Funktion 'setup' wird beim Programmstart aufgerufen. 'draw' wird jedesmal aufgerufen, wenn das Fenster neu gezeichnet werden soll.
int radiusX = 200;
int radiusY = 100;

void setup()
{
  size(400,400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
  strokeJoin(ROUND);
  noFill();
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  stroke(200,0,0,100);      // def. zeichenfarbe
  ellipse(100,100,radiusX,radiusY);

  stroke(0,0,0,100);      // def. zeichenfarbe
  beginShape();
    vertex(10,310);
    vertex(200,40);
    vertex(300,300);
    vertex(50,50);
    vertex(350,150);
  endShape();
}
Beispiel 6 - Funktionen In diesem Beispiel wird die Nutzung von Funktionen gezeigt. Vereinfacht(und leider nicht ganz richtig) könnte man sagen, Funktionen sind wie ein Textblock der den Inhalt der Funktion an die Stelle eingefügt, wo man den Funktionsnamen schreibt. In unserem Beispiel wird eine Funktion mit dem Namen 'smiley' definiert, diese Zeichnet natürlich einen Smiley. Eine Funktion ist wie folgt definiert:
[Rückgabe Type] Funktionsname([Parameter])
{
[Funktions Inhalt]
}
In unserem Fall ist der Funktionsname 'smiley'. Die Funktion besitzt keine Parameter, darum sind die Klammern leer. 'void' Bezeichnet den Rückgabe-Wert, unsere 'smiley' Funktion gibt keinen Rückgabe-Wert zurück, daher schreiben wir 'void', was soviel heisst wie unspezifiziert.
int radiusX = 200;
int radiusY = 100;

void setup()
{
  size(400,400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  smiley();          // funtions aufruf
}

// funktion
void smiley()
{
  noFill();
  ellipse(200,200,180,180);  // kopf

  fill(0);
  ellipse(200 - 30,200 - 30,20,20);  // linkes augen
  ellipse(200 + 30,200 - 30,20,20);  // rechtes augen

  noFill();
  arc(200,200,100,100,radians(20),radians(180-20));  // mund
}
Beispiel 7 - Funktionsparameter Dieses Beispiel zeigt die stärken der Nutzung von Funktionen. Die Funktion 'smiley' wird um 2 Parameter erweitert. Über diese Parameter kann ich die Position des Smiley steuern.
int radiusX = 200;
int radiusY = 100;

void setup()
{
  size(400,400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  smiley(radiusX,radiusY);          // funtions aufruf
}

// funktion
void smiley(int posX,int posY)
{
  noFill();
  ellipse(posX,posY,180,180);  // kopf

  fill(0);
  ellipse(posX - 30,posY - 30,20,20);  // linkes augen
  ellipse(posX + 30,posY - 30,20,20);  // rechtes augen

  noFill();
  arc(posX,posY,100,100,radians(20),radians(180-20));  // mund
}
Beispiel 8 - Animation Linie 13 ist eigentlich die einzige Veränderung zum vorherigen Bespiel. Doch die beiden Variablen 'mouseX' und 'mouseY' sind nicht definiert. Das kommt daher, dass diese beiden Variablen von Processing vordefiniert sind, sie werden vom Framework jeweils mit der aktuellen Maus-Position beschrieben. Wenn ihr das Beispiel ausprobiert bemerkt ihr, dass der Smiley dem Mauszeiger folgt. Eigentlich ist dies ja schon eine Animation, wie kommt dies zustande ? Wie vorher schon erwähnt wird die Funktion 'draw' von Processing aufgerufen, per Default ist Processing so eingestellt das 'draw' 60 mal in der Sekunde aufgerufen wird(60 Frames per Second-fps).  Mit dem Befehl 'frameRate' könnte ihr die Framerate selber ändern. Was passiert wenn ihr die Zeile  11 löscht oder auskommentiert ?
void setup()
{
  size(400,400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  smiley(mouseX,mouseY);          // funtions aufruf
}

// funktion
void smiley(int posX,int posY)
{
  noFill();
  ellipse(posX,posY,180,180);  // kopf

  fill(0);
  ellipse(posX - 30,posY - 30,20,20);  // linkes augen
  ellipse(posX + 30,posY - 30,20,20);  // rechtes augen

  noFill();
  arc(posX,posY,100,100,radians(20),radians(180-20));  // mund
}
Beispiel 9 - Bedingungen In der Programmierung gibt es Befehle mit denen man Bedingungen abbilden kann. Durch solche Bedingungen kann man Programmteile ausführen oder nicht. Hierfür nutzt man den Befehl 'if', z.B.:
if(x == 10)  // Bedingung
{  // x ist wirklich 10
}
else
{  // x ist nicht gleich 10
}
Die Bedingung ist ein Boolischer Ausdruck, hierfür gibt es folgende Operatoren:
  • gleich                   ==
  • ungleich              !=
  • grösser  als          >
  • kleiner   als          <
  • grösser gleich    >=
  • kleiner gleich     <=
  • logisch Und        &&
  • logisch Oder       ||
int SMILEY_DEFAULT  = 1;
int SMILEY_SAD      = 2;
int SMILEY_DRUNK    = 3;
int SMILEY_ANGRY    = 4;
int SMILEY_OLD      = 5;
int SMILEY_ASTOUND  = 6;
int SMILEY_SLEEPY   = 7;
int SMILEY_HORNY    = 8;
int SMILEY_PANIC    = 9;

int smileyType = SMILEY_DEFAULT;

void setup()
{
  size(400, 400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  // teste ob der mauszeiger innerhalb des smiley ist
  if (mouseX &gt; (width * .5 - 90)  &amp;amp;&amp;amp; mouseX &lt; (width * .5 + 90) &amp;amp;&amp;amp;
    mouseY &gt; (height * .5 - 90)  &amp;amp;&amp;amp; mouseY &lt; (height * .5 + 90))
    // die mouse ist im smiley, smiley mag das nicht
    smileyType = SMILEY_SAD;
  else
    smileyType = SMILEY_DEFAULT;

  pushMatrix();
  translate(width * .5, width * .5);
  smiley(smileyType);          // funtions aufruf
  popMatrix();
}

// funktion
void smiley(int smileyType)
{
  noFill();
  ellipse(0, 0, 180, 180);  // kopf

  fill(0);
  if ((smileyType &amp;amp; SMILEY_SAD) &gt; 0)
  {
    ellipse(0 - 30, 0 - 30, 20, 5);  // linkes augen
    ellipse(0 + 30, 0 - 30, 20, 5);  // rechtes augen
  }
  else
  {
    ellipse(0 - 30, 0 - 30, 20, 20);  // linkes augen
    ellipse(0 + 30, 0 - 30, 20, 20);  // rechtes augen
  }

  noFill();
  if (smileyType == SMILEY_SAD)
    arc(0, 60, 100, 100, radians(180+20), radians(360-20));  // mund
  else
    arc(0, 0, 100, 100, radians(20), radians(180-20));  // mund
}

Beispiel 10 - Keyboard Event
int SMILEY_DEFAULT  = 1;
int SMILEY_SAD      = 2;
int SMILEY_DRUNK    = 3;
int SMILEY_ANGRY    = 4;
int SMILEY_OLD      = 5;
int SMILEY_ASTOUND  = 6;
int SMILEY_SLEEPY   = 7;
int SMILEY_HORNY    = 8;
int SMILEY_PANIC    = 9;

int smileyType = SMILEY_DEFAULT;

void setup()
{
  size(400, 400);      // def. fenstergroesse

  smooth();           // aktiviere antialiasing
  strokeWeight(15);    // linienbreite
}

void draw()
{
  background(255);    // def. hintergrundfarbe

  pushMatrix();
  translate(width * .5, width * .5);
  smiley(smileyType);          // funtions aufruf
  popMatrix();
}

void keyPressed()
{
  switch(key)
  {
  case '1':
    smileyType = SMILEY_DEFAULT;
    break;
  case '2':
    smileyType = SMILEY_SAD;
    break;
  case '3':
    smileyType = SMILEY_DRUNK;
    break;
  }
}

// funktion
void smiley(int smileyType)
{
  // kopf
  noFill();
  ellipse(0, 0, 180, 180);  // kopf

  // augen
  fill(0);
  if (smileyType == SMILEY_SAD)
  {
    ellipse(0 - 30, 0 - 30, 20, 5);  // linkes augen
    ellipse(0 + 30, 0 - 30, 20, 5);  // rechtes augen
  }
  else if (smileyType == SMILEY_DRUNK)
  {
    line(-50, -40, -10, -10);
    line(-50, -10, -10, -40);

    line(50, -40, 10, -10);
    line(50, -10, 10, -40);
  }
  else
  {
    ellipse(0 - 30, 0 - 30, 20, 20);  // linkes augen
    ellipse(0 + 30, 0 - 30, 20, 20);  // rechtes augen
  }

  // mund
  noFill();
  if (smileyType == SMILEY_SAD)
    arc(0, 60, 100, 100, radians(180+20), radians(360-20));  // mund
  else if (smileyType == SMILEY_DRUNK)
  {
    line(-50, 20, 50, 20);
    arc(-10, 15, 50, 70, radians(20), radians(180-20));  // mund
  }
  else
    arc(0, 0, 100, 100, radians(20), radians(180-20));  // mund
}

Aufgabe:

  • Erweitere das Programm so, dass alle  Gesichstzustände darstellbar sind