无法理解科赫曲线的分形曲线

时间:2013-10-27 23:26:15

标签: java math recursion tail-recursion

我已将我的应用程序编码为完全绘制Koch雪花,但无论我使用调试器多少次,我都无法理解此行drawKochCurve (level - 1, segmentSize);的递归过程以及它如何产生分形曲线。

这是我的AP“递归”项目,但即使我真的理解了老师给我的大部分递归示例,我也无法掌握这一点。

我的代码:

import gpdraw.*;

public class buildShape {
public SketchPad paper = new SketchPad(700,700);
public DrawingTool pencil = new DrawingTool(paper);

public buildShape(){
  drawKochCurve(2,100);
  pencil.setDirection(-30);
  drawKochCurve(2,400);
  pencil.setDirection(-150);
  drawKochCurve(2,400);
}

private void drawKochCurve(int level, double initialSize){
    double segmentSize = initialSize / 3;
    if (level < 1){
        pencil.forward(initialSize);
    } else {
        drawKochCurve(level - 1, segmentSize);
        pencil.turnLeft(60);
        drawKochCurve(level - 1, segmentSize);
        pencil.turnRight(120);
        drawKochCurve(level - 1, segmentSize);
        pencil.turnLeft(60);
        drawKochCurve(level - 1, segmentSize);
    }
  }
}

1 个答案:

答案 0 :(得分:1)

你似乎在画一个Koch雪花。您可以通过在buildShape()函数中消除对drawKochCurve的两个调用来获得简单的Koch曲线。在剩余的函数调用中,将数字2替换为0.这将导致它在递归深度为0时产生一条直线。然后在连续运行时使用数字1,2,3,4,5再次运行它。每次增加此数字时,图形中的每个线段都会被较小细节的Koch曲线替换(由于递归限制)。通过重新放入其他函数调用,您可以从三角形而不是单个线段开始,但它实际上是使用3条不同的Koch曲线来制作雪花。