import java.awt.*; public class snowflake extends Canvas { private final double SQ = Math.sqrt(3.0)/6; private final int TOPX = 100, TOPY = 10; private final int LEFTX = 30, LEFTY = 150; private final int RIGHTX = 170, RIGHTY = 150; private int order; public snowflake( int order ) { setSize( 200,200 ); setBackground( Color.blue ); this.order = order; } // end of snowflake constructor public void setOrder( int order ) { this.order = order; } // end of setOrder() public void resetOrder() { order = 1; } // end of resetOrder() public void nextOrder() { order++; } // end of nextOrder() public void paint( Graphics g ) { drawFractal( order,TOPX,TOPY,LEFTX,LEFTY,g ); drawFractal( order,LEFTX,LEFTY,RIGHTX,RIGHTY,g ); drawFractal( order,RIGHTX,RIGHTY,TOPX,TOPY,g ); } // end of paint() public void drawFractal( int order,int x1,int y1,int x5,int y5, Graphics g ) { int dx, dy, x2, y2, x3, y3, x4, y4; if ( order == 1 ) { g.drawLine( x1,y1,x5,y5 ); } else { dx = x5 - x1; dy = y5 - y1; x2 = x1 + dx / 3; y2 = y1 + dy / 3; x3 = (int)((x1+x5)/2 + SQ * (y1-y5)); y3 = (int)((y1+y5)/2 + SQ * (x5-x1)); x4 = x1 + dx * 2/3; y4 = y1 + dy * 2/3; drawFractal( order-1,x1,y1,x2,y2,g ); drawFractal( order-1,x2,y2,x3,y3,g ); drawFractal( order-1,x3,y3,x4,y4,g ); drawFractal( order-1,x4,y4,x5,y5,g ); } } // end of drawFractal() } // end of snowflake class