xxxxxxxxxx
73
const r = 150; //pupil radius [pixels]
//let theta; //field angle [rad]
const layeralt = [100,200,300];
const freq = 0.003;
const strength = [400,-800,400];
let alpha1;
function setup() {
theta = 20 * PI / 180;
alpha1 = createSlider(-30, 30, -10);
createCanvas(500, 500);
}
function draw() {
let mean1 = [];
background(255);
textSize(16);
translate(width / 2, height * 6 / 8);
fill(0);
noStroke();
noFill();
strokeWeight(2);
stroke(0);
line(-r, 0, r, 0);
stroke(100);
//line(-r, 0, -r - height * tan(theta), -height);
//line(r, 0, r + height * tan(theta), -height);
for (let ni = 0; ni < layeralt.length; ni++) {
let alt = -layeralt[ni];
strokeWeight(0.2);
line(-width / 2, alt, width / 2, alt);
strokeWeight(1);
for (let mi = 0; mi < width; mi++) {
line(-width / 2 + mi,
alt + strength[ni] * (quad_func((mi-width/2) * freq) ),
-width / 2 + mi + 1,
alt + strength[ni] * (quad_func((mi + 1 - width/2) * freq)));
}
}
// dir 1
let alpha = alpha1.value() * PI / 180;
stroke(0, 0, 200);
fill(0, 0, 200,10);
beginShape();
vertex(-r - height * tan(alpha), height);
vertex(-r + height * tan(alpha), -height);
vertex(r + height * tan(alpha), -height);
vertex(r - height * tan(alpha), height);
endShape(CLOSE);
line(-r, 0, -r + height * tan(alpha), -height);
line(r, 0, r + height * tan(alpha), -height);
strokeWeight(2);
for (let mi = 0; mi < width; mi++) {
mean1.push(0);
if (-width / 2 + mi < -r || -width / 2 + mi + 1 > r)
continue;
let sum1 = 0;
let sum2 = 0;
for (let ni = 0; ni < layeralt.length; ni++) {
sum1 += strength[ni] * (quad_func((mi -width/2+ layeralt[ni] * tan(alpha)) * freq, 10 * ni) - 0.5);
sum2 += strength[ni] * (quad_func((mi + 1 -width/2+ layeralt[ni] * tan(alpha)) * freq, 10 * ni) - 0.5);
}
mean1[mi] = sum1;
line(-width / 2 + mi, sum1, -width / 2 + mi + 1, sum2);
}
}
function quad_func(x){
return (x)**3
}