2017-02-09 18 views
1

處理,使Java的使用環境。我試圖用蒙特卡羅方法來計算Pi的值。繪製圖表直播,向後切換位置隨着時間的推移

處理使用座標系統,其中,左上角爲原點,向右是正x軸,向下是正y軸。

我做了一個圖,繪製了pi的計算值,使用xCoordinate = xCoordinate + 1作爲計算中使用的隨機數(在飛鏢類比中也稱爲飛鏢)。然而,使用x座標= x座標+ 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;   
    } 
} 

任何幫助,將不勝感激,謝謝提前。

+0

如果我理解正確的話,你要繪製你的Pi的估計爲時間序列,其中在y軸您繪製Pi的估計,並在x軸你有用於數據點的數量的估計吧?當數據點的數量大於繪圖區域的寬度時,您只想繪製適合繪圖區域的最新k個點,對嗎? – Sentry

+0

是的,這是正確的。 – StopReadingThisUsername

+0

我冒昧地刪除了與此問題無關的代碼。但我建議大家展示一下你已經嘗試過,否則這個問題可能會被標記爲「過於寬泛」 – Sentry

回答

0

代替僅繪製每幀中的一個點,存儲在數據結構(如一個ArrayList)點,並重繪整個圖形的每個幀。當窗口左側的點「脫落」時,只需將它們從數據結構中移除即可。

你也可以嘗試繪製到一個PGraphics緩衝區,而不是直接到屏幕,然後偏移緩衝區,但你最終會遇到同樣的問題。所以只需將你的積分存儲在ArrayList中,並只繪製你想要的。

相關問題