Я пытаюсь смоделировать гармонограф, используя уравнения, показанные в 1 или найденные здесь, https://en.wikipedia.org/wiki/Harmonograph.
У меня есть следующая простая программа в p5.js;
var a1, a2, a3, a4;
var d1, d2, d3, d4, d5, d6;
var f1, f2, f3, f4, f5, f6;
var p1, p2, p3, p4;
var t = 0;
var harmonograph;
let ITERS = 100000;
function setup() {
createCanvas(500, 500);
background(255);
stroke(0);
harmonograph = {
a1: 100,
a2: 100,
a3: 100,
a4: 100,
d1: random(0,0.01),
d2: random(0,0.01),
d3: random(0,0.01),
d4: random(0,0.01),
f1: random(2,3),
f2: random(2,3),
f3: random(2,3),
f4: random(2,3),
p1: random(0,PI),
p2: random(0,PI),
p3: random(0,PI),
p4: random(0,PI)
};
}
function draw(){
print(harmonograph.a1,harmonograph.a2, harmonograph.a3, harmonograph.a4, harmonograph.d1, harmonograph.d2, harmonograph.d3, harmonograph.d4, harmonograph.f1, harmonograph.f2, harmonograph.f3, harmonograph.f4, harmonograph.p1, harmonograph.p2, harmonograph.p3, harmonograph.p4);
drawGraph();
noLoop();
}
function drawGraph() {
beginShape();
for (var i = 0; i < ITERS; i ++ ) {
harmonograph.xt = exp(-harmonograph.d1*t)*sin(t*harmonograph.f1+harmonograph.p1)*harmonograph.a1+exp(-harmonograph.d2*t)*sin(t*harmonograph.f2+harmonograph.p2)*harmonograph.a2,
harmonograph.yt = exp(-harmonograph.d3*t)*sin(t*harmonograph.f3+harmonograph.p3)*harmonograph.a3+exp(-harmonograph.d4*t)*sin(t*harmonograph.f4+harmonograph.p4)*harmonograph.a4
curveVertex(width/2+harmonograph.xt, height/2+harmonograph.yt);
t+=0.001;
}
endShape();
}
Я ожидал получить хорошие результаты, как и ожидалось от гармонографа, но я нахожу процесс немного сложным и трудным, каждый раз пробуя новые входные данные, будет ли кто-нибудь иметь какие-то совет относительно входов (фаза, демпфирование частоты) и т. д. c ..., в тот момент, когда я просто устанавливаю их случайным образом.
Спасибо!