Hilbert.java


This is the syntax highlighted version of Hilbert.java from 2.7 Recursion of
Introduction to Computer Science by Robert Sedgewick and Kevin Wayne.

/*************************************************************************
 *  Compilation:  javac Hilbert.java
 *  Execution:    java Hilbert N
 *  Dependencies: StdDraw.java
 *  
 *  Plot an order N Hilbert curve using two mutually recursive functions.
 *
 *  % java Hilbert 5
 *
 *
 *************************************************************************/


public class Hilbert {

    public static void hilbert0(int n, double length) {
        if (n == 0) return;
        StdDraw.rotate(90);
        hilbert1(n-1, length);
        StdDraw.goForward(length);
        StdDraw.rotate(-90);
        hilbert0(n-1, length);
        StdDraw.goForward(length);
        hilbert0(n-1, length);
        StdDraw.rotate(-90);
        StdDraw.goForward(length);
        hilbert1(n-1, length);
        StdDraw.rotate(90);
    }

    public static void hilbert1(int n, double length) {
        if (n == 0) return;
        StdDraw.rotate(-90);
        hilbert0(n-1, length);
        StdDraw.goForward(length);
        StdDraw.rotate(90);
        hilbert1(n-1, length);
        StdDraw.goForward(length);
        hilbert1(n-1, length);
        StdDraw.rotate(90);
        StdDraw.goForward(length);
        hilbert0(n-1, length);
        StdDraw.rotate(-90);
    }

    
    public static void main(String args[]) {
        int N = Integer.parseInt(args[0]);

        int SIZE = 512;
        StdDraw.create(SIZE, SIZE);

        double length = SIZE / Math.pow(2, N);
        StdDraw.go(length/2, length/2);
        StdDraw.penDown();

        hilbert0(N, length);
        StdDraw.show();
   }
}


Last updated: Tue Jun 22 11:30:01 EDT 2004 .
Copyright © 2004, Robert Sedgewick and Kevin Wayne.