В
scaleLevel -= 0.1;
есть, по крайней мере, одна большая ошибка, потому что при этом она становится равной нулю, и вы делитесь на нее в пределах REscale
.
Ваше намерение состоит в том, чтобы нарисовать некоторую экспоненциальную функция f(x)
в интервале от 0
до x
. Значение x
увеличивается со временем. Значение экспоненциальной функции также растет, но с другой скоростью. Так что вам придется использовать два отдельных масштабных коэффициента: sX = display_width / x
и sY = display_hight / f(x)
.
Я надеюсь, что это каким-то образом поможет вам начать. Вот некоторый код, чтобы проиллюстрировать, какой путь к go:
var x = 10
function setup() {
createCanvas(400, 400);
noLoop();
}
function my_func(x) {
return exp(x * 0.2);
}
function draw() {
background(220);
stroke(155);
strokeWeight(8);
noFill();
beginShape();
let nPoints = 20;
let dx = x / nPoints;
let ymax = my_func(x);
let dy = ymax / nPoints;
for (let i = 0; i <= x; i += dx) {
xValue = map(i, 0, x, 0, width);
yValue = map(my_func(i), 0, ymax, height, 0);
vertex(xValue, yValue);
}
endShape();
}
Я опустил галочки на осях. Я решил создать график stati c для значения x
в диапазоне от 0 до 10. Код можно легко превратить в анимацию, удалив оператор noLoop();
в функции setup
и добавив строку x += somedelta;
в функции draw
.