xxxxxxxxxx
78
// rp: real part
// ip: imaginary part
let minX,
minY,
maxX,
maxY,
gradWidth;
function setup() {
createCanvas(800, 800);
minX = -1.5;
minY = -1.5;
maxX = 1.5;
maxY = 1.5;
gradWidth = 5;
}
function draw() {
background(22);
axes();
strokeWeight(5);
stroke(150, 0, 233);
figure();
noLoop();
}
function add(n1, n2) {
return {
rp: n1.rp + n2.rp,
ip: n1.ip + n2.ip
};
}
function mult(n1, n2) {
return {
rp: n1.rp * n2.rp - n1.ip * n2.ip,
ip: n1.rp * n2.ip + n1.ip * n2.rp
}
}
function distance(n) {
return sqrt(n.rp ** 2 + n.ip ** 2);
}
function sequence(c) {
let n = {rp: 0, ip: 0};
for (let i = 0; i < 100; i++)
n = add(mult(n, n), c);
return distance(n) < 10;
}
function figure() {
const delta = 0.002;
for (let x = minX; x <= maxX; x += delta) {
for (let y = minY; y <= maxY; y += delta) {
if (sequence({rp: x, ip: y}))
drawPoint({rp: x, ip: y});
}
}
}
function axes() {
strokeWeight(2);
stroke(55);
line(0, height / 2, width, height / 2);
line(width / 2, 0, width / 2, height);
for (let x = ceil(minX); x <= maxX; x++)
line((x - minX) * width / (maxX - minX), height / 2 - gradWidth / 2, (x - minX) * width / (maxX - minX), height / 2 + gradWidth / 2);
for (let y = ceil(minY); y <= maxY; y++)
line(width / 2 - gradWidth / 2, (y - minY) * height / (maxY - minY), width / 2 + gradWidth / 2, (y - minY) * height / (maxY - minY))
}
function drawPoint(n) {
strokeWeight(1);
stroke(233);
point(width / 2 + n.rp * width / (maxX - minX), height / 2 - n.ip * height / (maxY - minY));
}