我尝试使用Turtle Graphics通过递归进行分形,但由于某种原因,我的代码似乎没有将Turtle返回原点。 我的代码如下
public static void sun(Turtle t, double radius) {
for ( int i = 0; i < 360; i++ ) {
t.forward( radius * .0174 );
t.left( 1 );
}
t.penup();
t.left(90);
t.forward(radius);
//t.fill();
t.pendown();
for (int i = 0; i < 8; i++) {
t.forward(2*radius);
t.backward(2*radius);
t.left(45);
}
t.penup();
t.backward(radius);
t.right(90);
t.pendown();
}
public static void fractalSun(Turtle t, double r, int level) {
int color;
if (level == 0) {
t.color(255, 0, 0);
sun(t, r);
}
else {
sun(t, r);
t.left(90);
t.forward(r);
t.right(90);
t.forward(r * 2);
t.right(90);
fractalSun(t, r/4, level -1);
t.left(90);
t.backward(r * 2);
}
}
代码编译成功,但生成此图像: Screenshot
我的目标是让乌龟回到每个太阳的中心。但有些东西不起作用。
答案 0 :(得分:1)
虽然sun()
方法将乌龟返回到它开始的位置,但fractalSun()
方法将乌龟留在图的中心。因此,无论fractalSun()
是自称还是sun()
,都必须进行调整。这是一个更新修复程序,更改次数更少(主要是删除):
更改sun()
中的最后一段代码:
t.penup();
t.backward(radius);
t.right(90);
t.pendown();
只是一个陈述:
// t.penup();
// t.backward(radius);
t.right(90);
// t.pendown();
从fractalSun()
删除三行代码并将参数更改为最终函数调用:
public static void fractalSun(Turtle t, double r, int level) {
if (level == 0) {
t.color(255, 0, 0);
sun(t, r);
} else {
sun(t, r);
// t.left(90);
// t.forward(r);
// t.right(90);
t.forward(r * 2);
t.right(90);
fractalSun(t, r / 4, level - 1);
t.left(90);
t.backward(r * 2 + r / 4); // added a term to the equation
}
}
<强>输出强>
注意:我使用Python龟模拟了这个,所以你可能需要调整我的Java代码,如果它不对。
答案 1 :(得分:-1)
每次说话后,你的8辐环都会将笔留在图形的中心。在循环结束时,从中心开始,执行以下序列:
t.penup();
t.backward(radius);
t.right(90);
t.pendown();
特别是,你支持一个半径;我认为那是你摆脱目标的地方。放下那条线,仔细检查你想要的方向,我想你会没事的。