## Pick a model * A ball moves around the screen. * It keeps going in the direction it starts. * What could the model be? --- ## Define the model Keep the names short; we will type them a lot. --- ## Define the model Keep the names short; we will type them a lot. `(define-struct pv (pos vel))` --- ## Example needed Create a `pv` structure called `ex1`. * Position `(100,50)` * Velocity `(-5,8)` --- ## Sketch ```racket (make-pv (make-posn 50 200) (make-posn 10 -30)) ``` --- ## update-pos * Write `update-pos: pv -> pv`. * Use velocity to change position, one time step. --- ## scale-velocity * `scale-velocity: pv(orig) num(scale) -> pv` * Multiply both x and y components of velocity of `orig` by `scale`. --- ## turn-180 What would this mean? Sketch first. --- ## Bouncing off walls 1 Should you bounce off of a wall? Sketch three true and three false. ```racket should-bounce-r? : pv num(xwall) -> boolean ``` The wall on the right is at `x=xwall`. --- ## Bouncing off walls 2 ```racket should-bounce-r? : pv num(xwall) -> boolean ``` The wall on the right is at `x=xwall`. Now actually write the function. --- ## Bouncing off walls 3 ```racket bounce-r-velocity: pv -> posn(new-velocity) ``` Given that you bounced, what should your new velocity be? Draw a sketch!