Gnuplot和Sierpinksi Triangle

题:

我有一个代码,希望有一个Sierpinski三角形,我想知道如何输出你读入gnuplot的数据文件? 我从来没有使用过gnuplot,我正试着玩它。 此外,如果那是不可能的,我应该如何修改我的代码以绘制我的三角形,以便我可以看到它?

代码说明:

我试图生成从点(0,0)开始的Sierpinski三角形,并且有0.33概率,下一步将在当前点和(0,2) 。 下一步将在当前点和(1,sqrt3)之间的中间值为0.33 。 下一步将在当前点和(0,0)之间的中间值为0.33

码:

 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; } } } 

首先,您的代码中存在一些问题:

  • 整数除法仅导致考虑第三个选项,因为1/3 = 0且2/3 = 0.使用1./3。 和2./3。 代替。
  • 您已经交换了最后一个选项的坐标, x0 = 1.0; y0 = sqrt3; x0 = 1.0; y0 = sqrt3; 应该是x0 = sqrt3; y0 = 1.0; 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 

在此处输入图像描述

要监视三角形如何逐点创建,您可以使用带有暂停的循环:

 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:

在此处输入图像描述