【问题标题】:Gnuplot and Sierpinksi TriangleGnuplot 和谢尔宾斯基三角
【发布时间】:2015-02-24 10:50:53
【问题描述】:

问题:

我有一个代码,希望能生成一个谢尔宾斯基三角形,我想知道如何将你读入的数据文件输出到 gnuplot 中?我从未使用过 gnuplot,我正在尝试使用它。另外,如果这不可能,我应该如何修改我的代码以绘制我的三角形以便我可以看到它?

代码说明:

我正在尝试生成从点(0,0) 开始的谢尔宾斯基三角形,并且有一个0.33 概率下一步将在当前点和(0,2) 之间的中间。有0.33 的概率,下一步将在当前点和(1,sqrt3) 之间。有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;         
        }
    }   
}

【问题讨论】:

  • 这应该是可行的。您能否提供您的代码生成的数据作为文件链接?

标签: java gnuplot


【解决方案1】:

首先,您的代码中有几个问题:

  • 整数除法导致只考虑第三个选项,因为 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

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

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:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多