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.

Vektoren – Eleganz dank Allianz

1. Oktober 2013

Eine Übung zum Thema Vektoren – diese verstand ich in der Theorie sehr gut, ihre Anwendung in der Praxis blieb mir aber schleierhaft. Deshalb arbeitete ich sehr eng mit Jonas zusammen, der hier den Durchblick hatte. Ich schaute zuerst wie er das Problem anging und folgte seinem Beispiel als es darum ging den Anfangs- und Endpunkt der Linie per Mausklick festzulegen. Er zeigte mir wie man mit einem „clickcount“ den ersten Mausklick vom zweiten unterscheiden konnte, was ich in späteren Übungen erneut anwandte. Als es darum ging, die Bewegung des Balls, bei Erreichen des Endpunktes, umzukehren schaute ich ebenfalls auf seinen Bildschirm und mir fiel mir auf, dass Jonas dazu eine ziemlich umständliche Methode anwandte. Ich begann nach einfacheren Wegen zu suchen was mir - zu meinem eigenen Erstaunen – nach kurzem Tüfteln selbstständig gelang. So konnte ich mich umgehend für seine Hilfe revanchieren, „die eine Hand wusch die andere“ und wir waren beide ab der eleganten Lösung erfreut. Hier seine Sicht der Dinge Erkenntnis: Aus den Fehlern anderer zu lernen bringt fast so viel wie sie selber zu begehen.

PVector     startPos = new PVector();
PVector     endPos = new PVector();
int         curTime = 0;
int         animSpeed = 5;
int         animTime = 1000;
boolean     drawFlag=false;
int clickcount=0;
 
void setup()
{
  size(640, 480);
  smooth();
}
 
void draw()
{
  background(51);
 
 
  if(drawFlag == true)
  {
  // calc. the anim time
  curTime = curTime + animSpeed;
  if(curTime >= animTime)
     animSpeed = -animSpeed;
     
     if (curTime == 0)
     animSpeed = -animSpeed;
 
  // calc. the current time in the animation
  float normTime = curTime * 1.0 / animTime;

    stroke(255);
    line(startPos.x,startPos.y,
         endPos.x,endPos.y);
 
    // calculate the position of the circle on the line
    PVector dir = PVector.sub(endPos,startPos);
 
    PVector pos = PVector.add( startPos , PVector.mult(dir,normTime));
    ellipse(pos.x,pos.y, 20,20);
  }
 
}
 
void mousePressed()
{
  if (clickcount == 0){
  drawFlag = false;
  //curTime = 0;
  startPos.set(mouseX,mouseY,0);
  endPos = startPos.get();
  clickcount = +1;
  }
  else if (clickcount == 1){
    drawFlag = true;
    endPos.set(mouseX,mouseY,0);
    clickcount = 0;
    curTime = 0;
  }
}
 
/*void mouseDragged()
{
  endPos.set(mouseX,mouseY,0);
}
 
void mouseReleased()
{
  drawFlag = false;
  println("released");
}
*/