-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfractal_45_node.js
More file actions
73 lines (59 loc) · 1.77 KB
/
fractal_45_node.js
File metadata and controls
73 lines (59 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const { createCanvas } = require('canvas');
const GIFEncoder = require('gifencoder');
const fs = require('fs');
let sizexy=512;
let sizex=sizexy;
let sizey=sizexy;
let size = 1;
let quadratic=1;
let a1=130;
let a2=493;
let discretization=a1/a2; // MouseX/MouseY
let sqrt=1;
let sequence=[0]
for (var i=1;i<sizexy;i++){
const ii=quadratic ? i*i : i;
sequence[i]=sequence[i-1]+(Math.floor(ii*discretization*Math.sqrt(sqrt))%2*2-1);
}
// Calculate min/max of (sequence[x] + sequence[y])
let min = Infinity;
let max = -Infinity;
for (let x = 0; x < sizexy; x++) {
for (let y = 0; y < sizexy; y++) {
const val = sequence[x] + sequence[y];
if (val < min) min = val;
if (val > max) max = val;
}
}
let kmax=max-min;
const canvas = createCanvas(sizex * size, sizey * size);
const ctx = canvas.getContext('2d');
const encoder = new GIFEncoder(sizex * size, sizey * size);
encoder.createReadStream().pipe(fs.createWriteStream(`fractal_${a1}_${a2}_${quadratic}.gif`));
encoder.start();
encoder.setRepeat(0); // 0 = loop forever
encoder.setDelay(100); // frame delay in ms
encoder.setQuality(10);
//for (let i = 0; i <= 20; i++) {
for (let i = 0; i <kmax; i++) {
ctx.fillStyle = 'rgb(0,0,0)'
ctx.fillRect(0, 0, sizex * size, sizey * size);
ctx.fillStyle = 'rgb(255,255,255)';
for(var x=0;x<sizex;x++){
for(var y=0;y<sizey;y++){
let val = sequence[x] + sequence[y] - min;
//if(val%4==i%4){
if(val%4==i%4 || val%5==i%5){
let hue = ((val + i) * 360 / kmax) % 360;
ctx.fillStyle = `hsl(${hue}, 100%, 50%)`;
}else{
ctx.fillStyle = 'rgb(0,0,0)';
}
ctx.fillRect(x * size, y * size, size, size);
}
}
// Add frame to GIF
encoder.addFrame(ctx);
}
encoder.finish();
console.log('GIF saved');