对于作业,我的任务是创建一个递归方法,以便创建一个Sierpinski地毯。对于我的代码,我的一个计算没有给出正确的输出,所以我不得不将我的公式换成另一个应该给出相同结果但却没有。这是实际工作的代码。
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class HW2 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane pane = new BorderPane();
Button enter = new Button("Display");
Label number = new Label("Enter in Order:");
TextField input = new TextField();
HBox v = new HBox();
HBox h = new HBox();
Pane p = new Pane();
h.getChildren().addAll(number, input, enter);
h.setSpacing(10);
pane.setBottom(h);
// pane.setCenter(v);
pane.setCenter(p);
h.setAlignment(Pos.CENTER);
v.setAlignment(Pos.CENTER);
Scene scene = new Scene(pane, 900, 900);
primaryStage.setTitle("Square Fractal");
primaryStage.setScene(scene);
primaryStage.show();
enter.setOnAction(e -> {
points(Integer.parseInt(input.getText()), p);
});
}
public static void main(String[] args) {
launch(args);
}
public static void points(int x, Pane p) {
p.getChildren().clear();
draw(200, 350, 350, p, x);
}
public static void draw(double size, double a, double b, Pane p) {
Rectangle r = new Rectangle(a,b,size,size);
p.getChildren().add(r);
}
public static void draw(double size, double a, double b, Pane p, double amt) {
if (amt == 0) {
draw(size, a, b, p);
} else {
draw(size, a, b, p);
double size2 = size / 3;
double a1, a2, a3, b1, b2, b3;
a1 = a - 3 * size2 + size2;
a2 = a + 3 * size2 + size2;
a3 = a + size2;
b1 = b + 3 * size2 + size2;
b2 = b - 3 * size2 + size2;
b3 = b + size2;
draw(size2, a1, b1, p, amt - 1);
draw(size2, a1, b2, p, amt - 1);
draw(size2, a2, b1, p, amt - 1);
draw(size2, a2, b2, p, amt - 1);
draw(size2, a1, b3, p, amt - 1);
draw(size2, a2, b3, p, amt - 1);
draw(size2, a3, b1, p, amt - 1);
draw(size2, a3, b2, p, amt - 1);
}
}
}
代码块
double size2 = size / 3;
double a1, a2, a3, b1, b2, b3;
a1 = a - 3 * size2 + size2;
a2 = a + 3 * size2 + size2;
a3 = a + size2;
b1 = b + 3 * size2 + size2;
b2 = b - 3 * size2 + size2;
b3 = b + size2;
如果我用
替换它double size2 = size / 3;
double a1, a2, a3, b1, b2, b3;
a1 = a - 4 * size2;
a2 = a + 4 * size2;
a3 = a + size2;
b1 = b + 4 * size2;
b2 = b - 4 * size2;
b3 = b + size2;
矩形位置都不合适。
4 * size2与3 * size2 + size2有什么区别,为什么前者不起作用?
答案 0 :(得分:0)
让我们看看这两行:
a1 = a - 3 * size2 + size2; // original
a1 = a - 4 * size2; // replaced
那么,第一个会发生什么?您从a
中减去3 * size2
,然后添加size2。
第二个需要a
并从中减去4 * size2
。
第一行几乎从a减去2倍size2,而第二行减去4次size2。
答案 1 :(得分:0)
数学上,(x = y + 3y + y)!=(x = 4y)。你问题中的第一个方程是简单的(x = 5y),当y = 0时,它只等于(x = 4y)。
真的,这里的问题是操作顺序。工作代码被解释为((a - (3 * size2))+ size2)。您的修订版被解释为(a - (4 * size2)),这两个将永远不会相等。