0

我已经编写了我的应用程序以完全绘制科赫雪花,但是无论我使用调试器执行多少次,我都无法理解这条线的递归过程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);
    }
  }
}
4

1 回答 1

1

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

于 2013-10-28T14:36:27.143 回答