/* Variablendeklaration */ ... var kmy_h; // Regler Koeff. Haftreibung var kmy_g; // Regler Koeff. Gleitreibung var alp; // alpha: Gefälle der Rampe var s, v; // Objektort und -geschwindigkeit var sign, sign0; // Vorzeichen Geschwindigkeit var moveObject; // Haftreibung überwunden ... var FG_, FH_, FN_; // Parallelogramm-Kräfte var my_h, my_g; // Koeff. der Haft- bzw. Gleitreibung var alpha_krit; // kritischer Rampenwinkel var g = 9.81; // Erdbeschleunigung var g_; // Beschleunigungsbetrag auf der Rampe function setup() { ... } function draw() { ... if (alp > alpha_krit || moveObject) { v = v0 + g_*t; // analytische Lösung Geschwindigkeit s = s0 + v0*t + g_*sq(t)/2; // analytische Lösung Ort } else { v = 0; // Obj. nicht in Bewegung -> Haftreibung t = 0; } if (abs(v) < 0.003 || sign != sign0) /* Geschwindigkeit kleiner als Schwellw. oder Richtungswechsel? */ { moveObject = false; } else { g_ = g*(sin(alp)-sign*my_g*cos(alp)); // wirksame Erdbeschleunigung moveObject = true; sign0 = sign; // Vorzeichen merken if (v > 0) sign = 1; else sign = -1; } if (endProgram(s < -l || s >= -b || t > 20)) dt = 0; else t = t + dt; }