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");
}
*/