Below is the syntax highlighted version of BouncingBall.java.
It differs from the version in Booksite 1.5 in the initial position of the ball, and random factors for the velocity and radius.
/************************************************************************* * Compilation: javac BouncingBall.java * Execution: java BouncingBall * Dependencies: StdDraw.java * Implementation of a 2-d bouncing ball in the box from (-1, -1) to (1, 1). *************************************************************************/ public class BouncingBall { public static void main(String[] args) { // set the scale of the coordinate system StdDraw.setXscale(-1.0, 1.0); StdDraw.setYscale(-1.0, 1.0); // initial values, random velocity and size double rx = 0.0, ry = 0.0; // position double vx = 0.015 - Math.random() * 0.03; // x velocity double vy = 0.015 - Math.random() * 0.03; // y velocity double radius = 0.025 + Math.random() * 0.05; // size // main animation loop while (true) { // bounce off wall according to law of elastic collision if (Math.abs(rx + vx) > 1.0 - radius) vx = -vx; if (Math.abs(ry + vy) > 1.0 - radius) vy = -vy; // update position rx = rx + vx; ry = ry + vy; // clear the background StdDraw.setPenColor(StdDraw.GRAY); StdDraw.filledSquare(0, 0, 1.0); // draw ball on the screen StdDraw.setPenColor(StdDraw.BLACK); StdDraw.filledCircle(rx, ry, radius); // display and pause for 20 ms StdDraw.show(20); } } }