package turtlehilbert; /****************************************************************************** * 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 TurtleHilbert { private Turtle turtle; public TurtleHilbert(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); } // Hilbert curve private void hilbert(int n) { if (n == 0) return; turtle.turnLeft(90); treblih(n-1); turtle.goForward(1.0); turtle.turnLeft(-90); hilbert(n-1); turtle.goForward(1.0); hilbert(n-1); turtle.turnLeft(-90); turtle.goForward(1.0); treblih(n-1); turtle.turnLeft(90); } // evruc trebliH public void treblih(int n) { if (n == 0) return; turtle.turnLeft(-90); hilbert(n-1); turtle.goForward(1.0); turtle.turnLeft(90); treblih(n-1); turtle.goForward(1.0); treblih(n-1); turtle.turnLeft(90); turtle.goForward(1.0); hilbert(n-1); turtle.turnLeft(-90); } public static void koch(int n, double step, Turtle turtle) { if (n == 0) { turtle.goForward(step); return; } koch(n-1, step, turtle); turtle.turnLeft(60.0); koch(n-1, step, turtle); turtle.turnLeft(-120.0); koch(n-1, step, turtle); turtle.turnLeft(60.0); koch(n-1, step, turtle); } public static void main(String[] args) { int n =5; // int n = Integer.parseInt(args[0]); // double step = 1.0 / Math.pow(3.0, n); // Turtle turtle = new Turtle(0.0, 0.0, 0.0); // koch(n, step, turtle); new TurtleHilbert(n); } }