Subato

Snowflakes

package name.panitz.oose.ws17;

public class SnowFlake extends PolygonObject{
  int depth;

  SnowFlake(int depth, Vertex corner, double width, Vertex velocity) {
    super(corner, width, width, velocity);
    this.depth = depth;
    initPolygon();
  }

  @Override
  public String toString() {
    return "new SnowFlake("+depth+",new Vertex"+corner+","+width+",new Vertex"+velocity+")";
  }
  
  void initPolygon() {
    int offset = (int)(height/4.5);
    int y1 = (int)(height)-offset;
    int h = (int)(y1/2);
    int oy = 0;
    drawSnow(depth, offset/2, y1+oy, y1+offset/2, y1+oy);
    drawSnow(depth, y1+offset/2, y1+oy, h+offset/2, oy);
    drawSnow(depth, h+offset/2, oy, offset/2, y1+oy);    
  }

  private void drawSnow(int lev, double x1, double y1, double x5, double y5) {
    if (lev == 0) {
      p.add(x1,y1);
    } else {
      double deltaX = x5 - x1;
      double deltaY = y5 - y1;

      double x2 = x1 + deltaX / 3;
      double y2 = y1 + deltaY / 3;
      drawSnow(lev - 1, x1, y1, x2, y2);
      
      int x3 = (int) (0.5 * (x1 + x5) + Math.sqrt(3) * (y1 - y5) / 6);
      int y3 = (int) (0.5 * (y1 + y5) + Math.sqrt(3) * (x5 - x1) / 6);
      drawSnow(lev - 1, x2, y2, x3, y3);
      
      double x4 = x1 + 2 * deltaX / 3;
      double y4 = y1 + 2 * deltaY / 3;

      drawSnow(lev - 1, x3, y3, x4, y4);
      drawSnow(lev - 1, x4, y4, x5, y5);
    }
  }
}