绘制图表直播,随着时间的推移向后移动点

时间:2017-02-09 08:28:36

标签: java processing

Processing是一个利用Java的环境。我试图使用蒙特卡罗方法来计算Pi的值。

处理使用左上角为原点的坐标系,右侧为正x轴,向下为正y轴。

我制作了一个图表,绘制pi的计算值,使用xCoordinate = xCoordinate + 1作为计算中使用的随机数的数量(在飞镖类比中也称为飞镖)。然而,使用xCoordinate = xCoordinate + 1作为随机数的数量增加以绘制图形已经证明是由于有限的水平空间而非常有限的方法,因为点漂移到屏幕外的点。如何使图形使得最新值始终添加到常量xCoordinate,随着随机点数量的增加,先前的值会向后移动?

我的代码目前是:

float inCircle = 0;
float inSquare = 0;
float xCoordinate = 600;

void setup() {
  size(1200, 600);
  background(50);
  frameRate(50);
  line(0, 360, 360, 360);
  line(360, 0, 360, 360);
}

void draw() {  
  // inCircle and inSquare are updated
  // ...

  if (inSquare == 0.0) {    
    print("Calculating...");  
  } else {  
    println(inCircle / inSquare);
    line(600, 300, 1200, 300); // x = 3.14
    line(600, 345, 1200, 345); // x = 3
    line(600, 25, 1200, 25); // x = 4

    // Draw Pi estimate (y-axis) at xCoordinate
    ellipse(xCoordinate, 300-(320*((inCircle / inSquare)-3.14159265)), 1, 1);

    xCoordinate = xCoordinate + 1;        
  }
}

任何帮助将不胜感激,提前感谢。

1 个答案:

答案 0 :(得分:0)

不是每帧只绘制一个点,而是将点存储在数据结构中(如ArrayList)并每帧重绘整个图形。当点“落下”窗口左侧时,只需将它们从数据结构中删除即可。

您也可以尝试绘制到PGraphics缓冲区,而不是直接绘制到屏幕上,然后偏移缓冲区,但最终会遇到同样的问题。因此,只需将您的积分存储在ArrayList中,然后只绘制您想要的积分。