2013-10-04 3 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', затем добавьте вызов' noLoop() 'в качестве второй строки в' setup', чтобы код запускался только один раз вместо непрерывно по умолчанию frameRate. 'setup' предназначен для инструкций по настройке вашего эскиза, прежде чем рисовать вещи. Инструкции по рисованию могут работать, но это не то место, куда они должны идти. –

ответ

1

В вашем цикл, вы используете int как счетчик, но вы приращение его на 0,5. Когда i является положительным и он увеличивается, то 0,5 усекается, и я остаюсь тем, что было раньше, поэтому цикл работает вечно. Замечательно, что i действительно увеличивается, когда оно отрицательное. Усечение работает до нуля, поэтому добавление 0.5 заканчивается добавлением 1. Изменение объявления i от int i = -4 до float i = -4 исправлено на моем компьютере. Вы также можете увеличить вес удара, по крайней мере, временно, чтобы проверить, что очки нарисованы (их было трудно увидеть для меня, и я не был уверен, что он работает сначала).

Смежные вопросы