在 Java 中使用遞迴繪製 Koch 雪花圖
本文將解釋如何在 Java 中使用遞迴製作 Koch 雪花。
在 Java 中使用遞迴繪製 Koch 雪花
科赫曲線也被稱為雪花曲線,因為它像雪花一樣形成。分形曲線之一就是這個。
下面是具體的繪製方法。
- 將等邊三角形的每一邊分成三個相等的部分。
- 取中間段的一側三等分後,刪除中間段,以構成等邊三角形。
- 重複前兩個步驟,畫一個較小的三角形。
- 繼續直到達到無窮大,產生的曲線就是科赫曲線。
讓我們看一個例子。一小簇西蘭花可以看作是較大簇的一個分支,在不同的尺度上表現出自相似的形式。
較小的分支可以擴充套件到適當的比例,以建立一個幾乎與整體相同的叢集。因此,我們可能會爭辯說這樣的西蘭花簇是分形的。
以下是分形的一些性質:
- 分形集包含任何微小尺寸的精細結構或尺度特徵。
- 太不規則了,不能用經典歐幾里得幾何來表示。
- 自相似豪斯多夫維數將大於拓撲維數,至少是粗略的或任意的。
傳統的幾何詞彙無法解釋分形集。它既不是滿足特定標準的點的路徑,也不是一些基本方程的解集。
自相似性存在於分形集中,無論是近似自相似性還是統計自相似性。在大多數情況下,分形集的分形維數高於其等效的拓撲維數。
一個相對簡單的過程在最令人信服的情況下定義了分形集,並且可以將其建立為變換的迭代。
各種圖根據不同的繪製技術呼叫遞迴實現,如科赫曲線。
研究此程式碼的演算法並將其用作其他 Java 小程式的模型。
遞迴 Serpienski Gasket 是這個遞迴 Koch 雪花程式的主要參考,下面的公式用於建立原始碼。
原始碼:
package KochSnowflakes;
import java.awt.*;
import javax.swing.*;
public class RecursiveKochSnowFlakes extends JApplet{
int initiallevel = 0;
public void init(){
String StringLevel = JOptionPane.showInputDialog("Enter the Recursion Depth");
initiallevel = Integer.parseInt(StringLevel);
}
public void paint(Graphics z){
DrawKoch(z,initiallevel,20,280,280,280);
DrawKoch(z,initiallevel,280,280,150,20);
DrawKoch(z,initiallevel,150,20,20,280);
}
private void DrawKoch (Graphics z, int level, int a1, int b1, int a5, int b5){
int delX, delY, a2, b2, a3, b3, a4, b4;
if (lev == 0){
z.drawLine(a1, b1, x5, y5);
}
else{
delX = a5 - a1;
delY = b5 - b1;
a2 = a1 + delX / 3;
b2 = b1 + delY / 3;
a3 = (int) (0.5 * (a1+a5) + Math.sqrt(3) * (b1-b5)/6);
b3 = (int) (0.5 * (b1+b5) + Math.sqrt(3) * (a5-a1)/6);
a4 = a1 + 2 * delX /3;
b4 = b1 + 2 * delY /3;
DrawKoch (z,level-1, a1, b1, a2, b2);
DrawKoch (z,level-1, a2, b2, a3, b3);
DrawKoch (z,level-1, a3, b3, a4, b4);
DrawKoch (z,level-1, a4, b4, a5, b5);
}
}
}
輸出:
-
如果我們輸入
0
作為遞迴深度, -
如果我們輸入
1
作為遞迴深度, -
如果我們輸入
2
作為遞迴深度, -
如果我們輸入
3
作為遞迴深度, -
如果我們輸入
4
作為遞迴深度,
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn