2015-02-23 16 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