// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // // This is a two-dimensional bouncing ball. The ball has position (x1,x2) and // // velocity (v1,v2) that are initially (x10,x20) and (v10,v20). Each time the // // height x2 is zero, the vertical speed v2 changes its sign and looses some // // energy. The horizontal speed is decreased by a constant wind. // // ************************************************************************** // macro wind = -5.0; macro gravity = 9.8; module Ball2D(real ?x10,?x20,?v10,?v20,?wind0,int n) { hybrid real x1,x2,v1,v2; // initial values x1 = x10; x2 = x20; v1 = v10; v2 = v20; pause; while(true) { // continuous flow flow{ drv(x1) <- v1; drv(x2) <- v2; drv(v1) <- wind; drv(v2) <- -gravity; } until(cont(x2)<=0.0); // bounce on the floor next(v2) = -0.5*v2; next(n) = n+1; pause; } }