package cs3500.turtle.control.commands; import cs3500.turtle.control.TracingTurtleCommand; import cs3500.turtle.tracingmodel.TracingTurtleModel; /** * This command implements the "Koch snowflake". * The Koch snowflake is a recursively drawn figure. * It starts with an equilateral triangle whose * sides are of a given length. * * Then, each segment is broken down into 4 segments: * go 1/3rd length in the direction of the line, * turn 60 and go 1/3rd length, then turn -120 and go * 1/3rd length, and finally turn 60 and go 1/3rd * length. Basically it converts * _____________ to * /\ * / \ * ___/ \____ */ public class Koch implements TracingTurtleCommand { private double d; private int depth; public Koch(double distance,int depth) { d = distance; this.depth = depth; } @Override public void go(TracingTurtleModel m) { drawKoch(d,depth,m); m.turn(-120); drawKoch(d,depth,m); m.turn(-120); drawKoch(d,depth,m); m.turn(-120); } private void drawKoch(double distance,int depth,TracingTurtleModel model) { if (depth>0) { drawKoch(distance/3,depth-1,model); model.turn(60); drawKoch(distance/3,depth-1,model); model.turn(-120); drawKoch(distance/3,depth-1,model); model.turn(60); drawKoch(distance/3,depth-1,model); } else { model.trace(distance); } } }