SingleHilbert.java


Below is the syntax highlighted version of SingleHilbert.java from §3.2 Creating Data Types.


/******************************************************************************
 *  Compilation:  javac SingleHilbert.java
 *  Execution:    java SingleHilbert n
 *  Dependencies: StdDraw.java
 *
 *  Plot an order n Hilbert curve using a singly recursive function.
 *
 *  % java SingleHilbert 5
 *
 *
 ******************************************************************************/


public class SingleHilbert {
    private Turtle turtle;

    public SingleHilbert(int n) {
        turtle = new Turtle(0.5, 0.5, 0.0);
        double max = Math.pow(2, n);
        turtle.setXscale(0, max);
        turtle.setYscale(0, max);
        hilbert(n, +1);
    }

    public void hilbert(int n, int parity) {
        if (n == 0) return;
        turtle.turnLeft(parity * 90);
        hilbert(n-1, -parity);
        turtle.goForward(1.0);
        turtle.turnLeft(-parity * 90);
        hilbert(n-1, +parity);
        turtle.goForward(1.0);
        hilbert(n-1, +parity);
        turtle.turnLeft(-parity * 90);
        turtle.goForward(1.0);
        hilbert(n-1, -parity);
        turtle.turnLeft(parity * 90);
    }

    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        new SingleHilbert(n);
    }
}


Copyright © 2000–2022, Robert Sedgewick and Kevin Wayne.
Last updated: Thu Aug 11 10:22:50 EDT 2022.