java - Gnuplot 和谢尔宾斯基三角

标签 java gnuplot

问题:

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

代码说明:

我正在尝试生成从点 (0,0) 开始的 Sierpinski 三角形,下一步有一个 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;         
        }
    }   
}

最佳答案

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

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

关于java - Gnuplot 和谢尔宾斯基三角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671129/

相关文章:

gnuplot - 在 gnuplot 的 plot 命令中进行计算

gnuplot - 如何在gnuplot中一起使用 "var"和 "palette"?

java - 如何让Apache Camel中的事件驱动消费者删除消费过的消息?

java - Android 对话框 OnClick 方法不起作用?

java - RxJava 并发修改异常

gnuplot - 使用 gnuplot 在轴上显示 2 的幂

gnuplot - 如何完全重置 gnuplot?

java - 检查设备和 com 端口之间的连接

java - com.microsoft.sqlserver.jdbc.SQLServerException : The value is not set for the parameter number 1

gnuplot - gnuplot 中的发光( NEON )效果