BrownianBridge.java


Below is the syntax highlighted version of BrownianBridge.java from §2.7 Recursion.

/*************************************************************************
 *  Compilation:  javac BrownianBridge.java 
 *  Execution:    java BrownianBridge variance
 *  Dependencies: StdDraw.java
 *
 *  Plots Brownian motion trajectory using the midpoint displacement
 *  method.
 *
 *************************************************************************/

import java.awt.Color;

public class BrownianBridge { 

    public static void midpoint(double x0, double y0, double x1, double y1, double var) {
        if (x1 - x0 < 1) return;

        double displacement = MyMath.gaussian(0, Math.sqrt(var));
        double xmid = 0.5 * (x0 + x1);
        double ymid = 0.5 * (y0 + y1) + displacement;

        midpoint(x0, y0, xmid, ymid, var / 2);
        StdDraw.go(xmid, ymid);
        midpoint(xmid, ymid, x1, y1, var / 2);
    }



    public static void main(String[] args) {
        double var = Double.parseDouble(args[0]);

        int WIDTH = 800, HEIGHT = 600;
        StdDraw.create(WIDTH, HEIGHT);
        StdDraw.clear(Color.lightGray);
        StdDraw.setScale(0, -2, WIDTH, 2);

        // draw axes
        StdDraw.go(0, 0);
        StdDraw.penDown();
        StdDraw.go(WIDTH, 0);
        StdDraw.penUp();

        // draw fractal
        StdDraw.go(1, 0);
        StdDraw.penDown();

        // to make Brownian motion (instead of bridge),
        // change (WIDTH, 0) to (WIDTH, Gaussian(0, stddev))
        midpoint(0, 0, WIDTH, 0, var / Math.sqrt(2));
        StdDraw.show();
    }
}



Last updated: Thu Sep 30 11:32:36 EDT 2004 .
Copyright © 2004, Robert Sedgewick and Kevin Wayne.