2015-02-23 50 views
1

問:gnuplot的和Sierpinksi三角

我有一個代碼,這有望使得謝爾賓斯基三角形,我想知道我怎麼能輸出你讀入gnuplot的數據文件嗎?我從來沒有用過gnuplot,我正在努力嘗試。另外,如果這是不可能的,我應該如何修改我的代碼以繪製我的三角形以便我可以看到它?

的代碼說明:

我想,以產生始於點(0,0)並有一個0.33概率看起來,下一步將是半路目前點位(0,2)之間的謝爾賓斯基三角形。下一步將在當前點和(1,sqrt3)之間的中途有一個0.33的概率。有一個0.33概率,下一步將在當前點和(0,0)之間。

代碼:

import java.util.Random; 

public class SierpinskiTriangle { 
    public static void main(String[] args) { 
     //int N = Integer.parseInt(args[0]); // number of points 
     int N = 5000; 
     double sqrt3 = Math.sqrt(3); 
     double x = 0.0, y = 0.0; //plots 

     //need to draw triangle boundary  

     // triangle rules 
     for (int i = 0; i < N; i++) { 
      double r = Math.random(); 
      double x0, y0; 
      if (r < 1/3) { 
       x0 = 0.0; y0 = 0.0; 
      } else if (r < 2/3) { 
       x0 = 0.0; y0 = 2.0; 
      } else { 
       x0 = 1.0; y0 = sqrt3; 
      } 
      x = (x0 + x)/2; 
      y = (y0 + y)/2;   
     } 
    } 
} 
+0

這應該是可行的。您能否提供您的代碼生成的數據作爲鏈接到文件? – Miguel 2015-02-23 16:01:25

回答

3

首先,你有一對夫婦的代碼中的問題:

  • 整數除法是導致只有第三種方案被考慮,因爲1/3 = 0和2/3 = 0.使用1./3。和2./3。代替。
  • 您已經交換了最後一個選項的座標,x0 = 1.0; y0 = sqrt3;應該是x0 = sqrt3; y0 = 1.0;

一旦你輸出的指向一個名爲data(我你的循環內使用System.out.println("" + x + " " + y);),你可以做的gnuplot以下:

set size ratio -1 
plot "data" u 2:1 pt 7 ps 0.3 

enter image description here

來監視三角形被逐點創建,您可以使用帶有暫停的循環:

set xrange [0:2] 
set yrange [0:1.8] 
do for [i=0:4999] { 
plot "data" u 2:1 every ::::i pt 7 ps 0.3 
pause 0.1 
} 

或者你可以創建一系列PNG文件的動畫gif:

set term pngcairo 
do for [i=0:4999] { 
set output "".i.".png" 
plot "data" u 2:1 every ::::i pt 7 ps 0.3 
} 

預計上面的速度會變慢。你可以跳過一些框架來加快速度。那麼做到這一點以外的gnuplot:

convert -delay 10 -loop 0 *.png animation.gif 

在這個例子中我用了50個增量和改變-delay以100:

enter image description here