试图制作一片科赫雪花,但它赢了';不行? 导入gpdraw.*; 导入javax.swing.*; 导入java.lang.Math; 公共类Koch2扩展了JFrame{ 画板纸; 绘图工具笔; 公共科赫2(){ 纸张=新画板(600600); 笔=新绘图工具(纸); } 公共空白图纸(双sL,整数级,双长度){ int x=1级; 双y=长度/3; 双z=-1.5*sL; 如果(级别
此代码的哪些部分有故障?我试图找出如何生成一条模板曲线,然后重复多次以生成实际曲线。我现在还不需要制作实际的雪花,那可以等到我算出曲线之后 假设试图制作一片科赫雪花,但它赢了';不行? 导入gpdraw.*; 导入javax.swing.*; 导入java.lang.Math; 公共类Koch2扩展了JFrame{ 画板纸; 绘图工具笔; 公共科赫2(){ 纸张=新画板(600600); 笔=新绘图工具(纸); } 公共空白图纸(双sL,整数级,双长度){ int x=1级; 双y=长度/3; 双z=-1.5*sL; 如果(级别,java,Java,此代码的哪些部分有故障?我试图找出如何生成一条模板曲线,然后重复多次以生成实际曲线。我现在还不需要制作实际的雪花,那可以等到我算出曲线之后 假设pen.forward(长度/(数学功率(3,长度))绘制一条直线: 科赫曲线的形成是递归的。要绘制n级Koch曲线,需要绘制四条(n-1)级曲线。绘制Koch曲线的伪代码如下所示: import gpdraw.*; import javax.swing.*; import java.lang.Math; public class Koch2 ext
pen.forward(长度/(数学功率(3,长度))代码>绘制一条直线:
科赫曲线的形成是递归的。要绘制n级Koch曲线,需要绘制四条(n-1)级曲线。绘制Koch曲线的伪代码如下所示:
import gpdraw.*;
import javax.swing.*;
import java.lang.Math;
public class Koch2 extends JFrame {
SketchPad paper;
DrawingTool pen;
public Koch2() {
paper = new SketchPad(600, 600);
pen = new DrawingTool(paper);
}
public void drawKoch(double sL, int level, double length) {
int x = level - 1;
double y = length / 3;
double z = -1.5 * sL;
if (level < 1) {
pen.up();
pen.move(z, 0);
pen.down();
pen.setDirection(0);
pen.forward(sL);
}
else {
pen.up();
pen.move(z, 0);
pen.down();
pen.setDirection(0);
pen.forward(length / (Math.pow(3, length)));
pen.setDirection(60);
pen.forward(length / (Math.pow(3, length)));
pen.turnRight(120);
pen.forward(length / (Math.pow(3, length)));
pen.turnLeft(60);
pen.forward(length / (Math.pow(3, length)));
pen.setDirection(60);
pen.forward(length / (Math.pow(3, length)));
pen.turnRight(120);
pen.forward(length / (Math.pow(3, length)));
pen.turnRight(120);
pen.forward(length / (Math.pow(3, length)));
pen.setDirection(60);
pen.forward(length / (Math.pow(3, length)));
pen.turnRight(120);
pen.forward(length / (Math.pow(3, length)));
pen.turnLeft(60);
pen.forward(length / (Math.pow(3, length)));
pen.setDirection(60);
pen.forward(length / (Math.pow(3, length)));
pen.turnRight(120);
pen.forward(length / (Math.pow(3, length)));
/*pen.setDirection(0);
pen.forward(length / (Math.pow(3, length)));
*/
drawKoch((sL), (x) , (y));
}
}
public static void main(String[] args) {
new Koch2().drawKoch(300, 6, 300);
}
}
在您的代码中,我看到有一个递归调用。您需要绘制较小的科赫曲线,而不是绘制直线。仅在基本情况下绘制直线。水平代表什么?如何将级别合并到绘制(n-1)曲线的公式中?n阶科赫曲线实际上是四(n-1)阶科赫曲线,0阶除外。阶数为0的科赫曲线只是一条直线。您可以查看演示。
drawKochCurve (length, level):
if level = 0:
drawStraightLine(length)
else:
drawKochCurve(length / 3, level - 1)
turnLeft(60)
drawKochCurve(length / 3, level - 1)
turnRight(120)
drawKochCurve(length / 3, level - 1)
turnLeft(60)
drawKochCurve(length / 3, level - 1)