所以我必須創建一個帶Swing的Sierpinski墊片的實現。 我不能使用遞歸或三角形。我必須使用以下 算法:Java Swing中的Sierpinski墊片實現有時只出現
選擇3個點來定義一個三角形。
選擇其中一個頂點作爲當前循環50,000次: 隨機選擇一個頂點作爲目標。 在目標和當前之間的中點畫一個像素。 使目前的中點。
在下面的圖片是我有時會編譯,但有些時候它會彈出並消失,或根本不會顯示。如果它顯示出來,然後我調整它消失的窗口大小(我不關心這個,但是如果它有幫助的話)。我編譯時只能生成下面的圖像(大約1/3時間)。圖片下方是我的代碼,分爲兩類。
import java.awt.*;
import javax.swing.JFrame;
public class SierpinskiGasket {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("SierpinskiGasket");
frame.setSize(630,580);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawSierpinski Sierpinski = new drawSierpinski();
frame.add(Sierpinski);
frame.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
public class drawSierpinski extends JPanel{
Point point1 = new Point(10,550),
point2 = new Point(300,30),
point3 = new Point(600,555),
current = point1, target;
private int count = 0;
public void paintComponent(Graphics g){
super.paintComponent(g);
while(count<= 50000){
int choice = (int)(Math.random()*3);
switch(choice){
case 0: target = point1; break;
case 1: target = point2; break;
case 2: target = point3; break;
default: System.exit(0);
}
current = midpoint(current,target);
g.drawLine(current.x,current.y,current.x,current.y);
count++;
}
}
public Point midpoint(Point a, Point b){
return new Point((Math.round(a.x+b.x)/2),
(Math.round(a.y+b.y)/2));
}
}
我假設它有事情做與Swing如何做多線程,但不幸的是我沒有對如何解決它太多的知識。非常感謝您的幫助!