java - 实时绘制图表,随着时间的推移向后移动点

标签 java processing

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

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

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

我当前的代码是:

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

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

最佳答案

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

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

关于java - 实时绘制图表,随着时间的推移向后移动点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131552/

相关文章:

python - 无法访问Processing.py中不同选项卡中的类

java - 使用 PVectors 使速度恒定

c# - 保持面向数据库的测试套件最新

java - Play Framework、Java 和 Eclipse Luna

java - 如何将外部供应商 SSL 证书配置到 JBoss 7.1 中

java - 处理 2 : Posting to Facebook error "The type Post is ambiguous"

java - 从设计的角度来看 "Leaking this"

java - Log4j PatternLayout - 将值添加到 %c

java - 在处理和理解代码中创建可视化

java - 处理 Java 环境中的构造函数出现问题