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);
}
}
}