科赫雪花是科赫曲线的升级版,其实也不难,只是多加了几条原始曲线而已。如果说科赫曲线的原始模型是一条直线,那科赫雪花的原始模型就是一个三角形。科赫雪花所应用的最核心的技术就是递归,它和循环不同,递归是不断地调用自己,而循环则是重复一段算法而已。过程相同,原理不同。
depth指的是递归的深度,控制递归的次数。
private void drawKoch(double x1, double y1, double x2, double y2, int depth,Graphics g) {
if(depth<=1){
g.drawLine((int)x1,(int) y1,(int)x2,(int)y2);//递归之后画出曲线
}
else{
double x3=(x2-x1)/3+x1;
double x4=(x2-x1)*2/3+x1;
double y3=(y2-y1)/3+y1;
double y4=(y2-y1)*2/3+y1;//其中两个顶点的情况
double x5=0,y5=0;
if(y1==y2){
x5=(x1+x2)/2;
y5=y1-(x4-x3)/2*Math.sqrt(3);
}
if((y4-y3)/(x4-x3)<0){
x5=x1;
y5=y4;
}
if((y4-y3)/(x4-x3)>0){
x5=x2;
y5=y3;//判断曲线的三种情况以及不同方法
}
drawKoch(x1, y1, x3, y3, depth-1,g);
drawKoch(x3, y3, x5, y5, depth-1,g);
drawKoch(x5, y5, x4, y4, depth-1,g);
drawKoch(x4, y4, x2, y2, depth-1,g);//深度减一,继续递归
}
}
depth指的是递归的深度,控制递归的次数。