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.

2. Tag

21. September 2012

Die Einführung in Java hat mit einem zügigen Tempo angefangen wirkt aber sehr logisch, gut aufgebaut und sehr gut rübergebracht. Es wurden grundlegende Konzepte und Begriffe geklärt. Am Nachmittag konnte man das gehörte und gelernte dann selbst umsetzten. Hier zeigte sich, dass nicht von heute auf morgen programmiert werden kann. Ich werde sicher noch ein paar Stunden investieren müssen um eine gewisse Sicherheit zu bekommen. Es war zwar der erste Tag aber er hat gezeigt in welche Richtung der Kurs weiterzieht. Für mich muss ein umdenken kommen, dass alles Schritt für Schritt geschieht und vom PC so gelesen wird, also ein algorithmisches Denken. Wenn dies einmal gelernt ist, wird sich der Code einfacher und schneller lesen lassen und Probleme und Aufgaben können schneller gelöst werden. Auch dies geschieht sicher nicht von heute auf morgen. Übung macht den Meister. Am Nachmittag haben wir eine Übung mit Smileys gemacht. Folgendes ist dabei herausgekommen:
Code:
</div>
<div>

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;
 case '4':
 smileyType = SMILEY_ANGRY;
 break;
 case '5':
 smileyType = SMILEY_OLD;
 break;
 case '6':
 smileyType = SMILEY_ASTOUND;
 break;
 case '7':
 smileyType = SMILEY_SLEEPY;
 break;
 case '8':
 smileyType = SMILEY_HORNY;
 break;
 case '9':
 smileyType = SMILEY_PANIC;
 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 auge
 ellipse(0 + 30, 0 - 30, 20, 5); // rechtes auge
 }
 else if (smileyType == SMILEY_DRUNK)
 {
 line(-50, -40, -10, -10); // linkes auge
 line(-50, -10, -10, -40); // linkes auge

line(50, -40, 10, -10); // rechtes auge
 line(50, -10, 10, -40); // rechtes auge
 }
 else if (smileyType == SMILEY_ANGRY)
 {
 line(-50, -30, -10, -10); // linkes auge
 line(50, -30, 10, -10); // rechtes auge
 }
 else if (smileyType == SMILEY_OLD)
 {
 pushStyle(); //style für brille
 strokeWeight(2); // dicke brille
 noFill();
 ellipse(0 - 30, 0 - 30, 50, 50); // linke brille
 ellipse(0 + 30, 0 - 30, 50, 50); // rechte brille
 line(-90,-30,-55,-30); //gestell links
 line(90,-30,55,-30); //gestell rechts
 line(-5,-30,+5,-30); //gestell mitte
 popStyle();
 }
 else if (smileyType == SMILEY_ASTOUND)
 {
 noFill();
 ellipse(-30, -30, 40, 40); // linkes auge
 ellipse(+30, -30, 40, 40); // rechtes auge
 }
 else if (smileyType == SMILEY_SLEEPY)
 {
 noFill();
 arc(-30, -30, 30, 30, radians(20), radians(180-20)); // linkes augen
 arc(+30, -30, 30, 30, radians(20), radians(180-20)); // rechtes auge
 }
 else if (smileyType == SMILEY_HORNY)
 {
 noFill();
 arc(-30, -15, 30, 30, radians(180+20), radians(360-20)); // linkes augen
 ellipse(+30, -30, 40, 40); // rechtes aug
 }
 else if (smileyType == SMILEY_PANIC)
 {
 line(-50, -40, -10, -10); // linkes auge
 line(-50, -10, -10, -40); // linkes auge

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

// 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 if (smileyType == SMILEY_ANGRY)
 {
 arc(0, 60, 100, 100, radians(180+20), radians(360-20)); // mund
 }
 else if (smileyType == SMILEY_OLD)
 {

pushStyle(); //style bart
 stroke(150,150,150); //farbe bart
 arc(0, 30, 45, 200, radians(30), radians(180-30)); // bart
 popStyle();
 arc(0, 0, 100, 100, radians(20), radians(180-20)); // mund
 }
 else if (smileyType == SMILEY_ASTOUND)
 {
 ellipse(0, 45, 30, 30);
 }
 else if (smileyType == SMILEY_SLEEPY)
 {
 line(-30, 30, 30, 30);
 }
 else if (smileyType == SMILEY_HORNY)
 {
 line(-30, 30, 30, 30); // mund
 pushStyle(); //style zunge
 stroke(255,0,0); //fabe zunge
 arc(-10, 15, 20, 100, radians(30), radians(180-30)); // zunge
 popStyle();
 }
 else if (smileyType == SMILEY_PANIC)
 {
 ellipse(0, 45, 30, 30);
 }
 else
 arc(0, 0, 100, 100, radians(20), radians(180-20)); // mund
 }

</div>
<div>
Es wurde in dieser Übung praktisch alles was vorher gezeigt und gelernt wurde nochmal umgesetzt. Neben der Programmierung konnte und musste man sich überlegen wie die einzelnen Emotionen dargestellt werden können. Auch dieser Schritt macht viel Spass was dann auch an den Resultaten ersichtlich war. Jeder interpretierte die Darstellung anders und daher kamen sehr viele verschiedene Smileys zum Vorschein.
Im speziellen der Umgang mit dem Koordinatensystem braucht am Anfang sehr viel Aufmerksamkeit. Teilweise halt mit „Trial and Error“. Code kann kopiert werden aber muss dann halt wieder individuell angepasst werden. Die zweite Übung war dann ein zacken härter für mich. Eventuell liegt es auch daran, dass man ein nach paar Stunden nicht mehr so fit ist und die Energie ein bisschen nachlässt J Die Aufgabe habe ich dann mit Hilfe von dem Mitstudenten gelöst. Wie ich schon geschrieben habe, muss ein algorithmisches Denken trainiert werden damit solche Aufgaben gelöst werden können. Das Smiley ausserhalb zu positionieren war weniger das Problem,  sondern das die Rotation richtig ist und das Kleine um das Grosse kreist. Nachdem die Lösung gezeigt wurde konnte ich es auch für mich logisch nachvollziehen. Ich habe anschliessend noch ein bisschen mit den Parametern gespielt und gesehen was sich wie verändert. Code:

float rot=0;

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

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

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

float radius = dist(mouseX,mouseY,width/2,height/2); // rechne die distanz vom mousecursor zum fensterzentrum aus
 radius = map(radius,0,width,1,4); // rechne aus in welchem bereich der radius am schluss sein sollte

pushMatrix();
 translate(200,200);
 rotate(calcAngle());
 scale(radius);
 smiley();
 // funtions aufruf

rotate (rot);
 translate(130,0);
 scale(.2);
 smiley(); // funtions aufruf
 popMatrix();
 rot += 0.01;
 }

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

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

noFill();
 arc(0,0,100,100,radians(20),radians(180-20)); // mund
 }

// berechne den winkel zur fenstermitter vom mausecursor aus
 // die winkel sind in radiant
 float calcAngle()
 {
 return -atan2(mouseX - (width / 2),mouseY - (height / 2));
 }

Ich denke, dass das heute gelernt in den nächsten Lektionen noch vertieft werden muss.