编写一个与 KochSnowflake 类似的 JavaFX 程序,显示各种阶数的 Sierpinski 三角分形。1 阶的 Sierpinski 三角就是一个三角形。阶数每增加 1,每一个三角形就会被三个小三角形替换,它们的顶点就是原三角形各边的中点。这道题的程序实现基本思想
时间: 2023-12-10 13:39:26 浏览: 112
下面是一个简单的 JavaFX 程序,可以显示各种阶数的 Sierpinski 三角分形:
```java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class SierpinskiTriangle extends Application {
private final int WIDTH = 600;
private final int HEIGHT = 600;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Sierpinski Triangle");
Canvas canvas = new Canvas(WIDTH, HEIGHT);
GraphicsContext gc = canvas.getGraphicsContext2D();
drawSierpinskiTriangle(gc, 0, 0, WIDTH, HEIGHT, 6);
Scene scene = new Scene(canvas);
primaryStage.setScene(scene);
primaryStage.show();
}
private void drawSierpinskiTriangle(GraphicsContext gc, double x1, double y1, double x2, double y2, int level) {
if (level == 0) {
gc.strokeLine(x1, y1, x2, y1);
gc.strokeLine(x2, y1, (x1 + x2) / 2, y2);
gc.strokeLine((x1 + x2) / 2, y2, x1, y1);
} else {
double x3 = (x1 + x2) / 2;
double y3 = (y1 + y2) / 2;
drawSierpinskiTriangle(gc, x1, y1, x3, y3, level - 1);
drawSierpinskiTriangle(gc, x3, y1, x2, y3, level - 1);
drawSierpinskiTriangle(gc, (x1 + x2) / 2, y2, x1, y1, level - 1);
}
}
public static void main(String[] args) {
launch(args);
}
}
```
在 `drawSierpinskiTriangle` 方法中,我们使用递归来绘制 Sierpinski 三角形。如果阶数为 0,我们直接绘制一个三角形。否则,我们将当前三角形分成三个更小的三角形,然后递归地绘制它们。
在 `start` 方法中,我们创建一个 `Canvas` 对象,并将其传递给 `drawSierpinskiTriangle` 方法来绘制 Sierpinski 三角形。最后,我们将 `Canvas` 对象添加到场景中,并将场景设置为主要舞台的场景。
阅读全文