Change target as the model runs: target =
//This bit runs just once //Use it to set initial values, scale the screen etc. dt = .01; grav = 9.8; a = 2; b = 7; c = 20; d = 10; L = 1; h = 1; v = 2; x = 1; //lean = .1 tmax=20; InitGraph(); ScaleWindow(0,-2,tmax,2); DrawAxes(); Label('Bicycle example',1,1.5); Colour(Black); t=0; LineStart(t,x); StepModel();
//function StepModel() //This bit runs each time the model steps in time angledem = -a * (x - xtarget) / b; if (angledem > .2) { angledem = .2;} if (angledem < -.2) {angledem = -.2;} leandem = -b * (angle - angledem) / c; if (leandem > .1) {leandem = .1;} if (leandem < -.1) {leandem = -.1;} u = c * (lean - leandem) + d * leanrate; if (u > .5) {u = .5;} if (u < -.5) {u = -.5;} dx = v * angle; dangle = v * u / L; dlean = leanrate; dleanrate = (grav * lean - u * v * v / L) / h; x = x + dx * dt; angle = angle + dangle * dt; lean = lean + dlean * dt; leanrate = leanrate + dleanrate * dt; t = t + dt; Colour(Red); Spot (t, lean); Colour(Black); Spot (t, x); Colour(Blue); Spot (t, u); Colour(Green); Spot(t, angle); if (t