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.