Имитированный гармонограф - Советы по выбору входа для интересных выходов - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь смоделировать гармонограф, используя уравнения, показанные в 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 ..., в тот момент, когда я просто устанавливаю их случайным образом.

Спасибо!

...