xxxxxxxxxx
94
const r = 150; //pupil radius [pixels]
//let theta; //field angle [rad]
const layeralt = [-200];
const freq = [0.003];
const strength = [80];
let alpha1;
function setup() {
theta = 20 * PI / 180;
alpha1 = createSlider(-30, 30, -10);
createCanvas(600, 600);
}
function draw() {
let mean1 = [];
background(255);
textSize(16);
translate(width / 2, height * 4 / 8);
fill(0);
noStroke();
text("0 km",-width/2+110,5);
text("True Aberration",-50,-layeralt[0]-10);
text("Fitted Aberration",-60,layeralt[0]-10);
text("Sampled Aberration",-70,-10);
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, -layeralt[ni], width / 2, -layeralt[ni]);
strokeWeight(1);
for (let mi = 0; mi < width; mi++) {
line(-width / 2 + mi,
alt + strength[ni] * (quad_func((mi-width/2) * freq[ni]) - 0.5),
-width / 2 + mi + 1,
alt + strength[ni] * (quad_func((mi + 1 - width/2) * freq[ni]) - 0.5));
}
}
// 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[ni], 10 * ni) - 0.5);
sum2 += strength[ni] * (quad_func((mi + 1 -width/2+ layeralt[ni] * tan(alpha)) * freq[ni], 10 * ni) - 0.5);
}
mean1[mi] = sum1;
line(-width / 2 + mi, sum1, -width / 2 + mi + 1, sum2);
}
noFill();
strokeWeight(2);
stroke(0);
line(-r, 0, r, 0);
stroke(100);
for (let ni = 0; ni < layeralt.length; ni++) {
let alt = layeralt[ni];
strokeWeight(0.2);
line(-width / 2, layeralt[ni], width / 2, layeralt[ni]);
strokeWeight(1);
for (let mi = 0; mi < width; mi++) {
line(-width / 2 + mi,
alt + strength[ni] * (quad_func((mi-width/2) * freq[ni] - alpha) - 0.5),
-width / 2 + mi + 1,
alt + strength[ni] * (quad_func((mi + 1 - width/2) * freq[ni]-alpha) - 0.5));
}
}
}
function quad_func(x){
return (x)**2
}