2013-10-04 48 views
0

我想用平均值= 0和標準偏差= 1使用處理繪製高斯曲線,但是當我的代碼運行時,沒有任何東西被繪製到屏幕上(甚至沒有背景) 。我的代碼:如何在處理中繪製高斯曲線

float x, y, mu, sigma; 

void setup() { 
    size(900, 650); 
    background(255); 
    stroke(0); 
    strokeWeight(1); 

    mu = 0.0; 
    sigma = 1.0; 

    for(int i = -4; i < 4; i += 0.5) { 
    x = i; 
    y = (1/(sigma * sqrt(2 * PI)))*(exp((-1 * sq(x - mu))/(2 * sq(sigma)))); 

    x = map(x, -4, 4, 0, width); 
    y = map(y, 0, 1, 0, height); 
    point(x, y); 
    } 
} 

void draw() { 

} 
+0

在正確的代碼注意:不要把所有的繪圖代碼放在'setup'中。取出size(...)後的所有代碼,並將其放在'draw'中,然後在'setup'中添加一個'noLoop()'調用作爲第二行,以便代碼只運行一次,而不是不斷在默認的frameRate。 'setup'用於繪製事物之前的草圖設置說明。繪圖說明可能有效,但不是它們應該去的地方。 –

回答

1

在你的for循環中,您使用的是int作爲計數器,但你0.5遞增它。當i是正數並且遞增時,0.5被截斷,我仍然是以前的 - 所以循環永遠運行。有趣的是i在負值時確實增加 - 截斷值趨近於零,因此加0.5後最後加1.將i的聲明從int i = -4更改爲float i = -4將其固定在我的計算機上。您可能還希望至少暫時增加中風的重量,以確認這些點是否正在繪製(他們很難看清我,我不確定它是否在起作用)。