Apollonian - Linux 256 bytes
Still C code and still Minsky circle, this draw some
kind of Apollonian
gasket fractal, not many big technical improvements there
except colors tweak and clearer structure, it use the downscale
pass i used in QuasiSpace to
avoid bounds checking.
It can be seen as an improved version of QuasiSpace,
the code is pretty similar ! Could probably be done in 128 bytes on
Linux by doing it in full assembly perhaps even C...
The algorithm is (roughly) as follow (you can "fill" the
inside of the circles by adjusting x and y outside the loop)
:
// init
x = 0
y = 1
// loop, preferably iterating more than once per loop
x -= (y << 2)
y -= (x >> 5) - (x >> 1)
x += (x >> 15) - (y << 2)
// scale it down when you plot it (here for a 512x512 image) : (x
>> 23), (y >> 23)
// outside the loop adjust x,y by adding the frame step (scaled up
by a big factor) to "fill" in details
adjusting x and y outside the loop "fill" in
details
Twitter variant
setup=_=>{createCanvas(512,512);x=y=1e18;for(i=6e6;i--;){x-=y<<3;y-=(x>>8)-(x>>2);x+=(x>>18)-(y<<3);point(x>>22,y>>22)}}
variant published on Twitter (p5js
framework)
More variants
Interesting variations can be done by adjusting the offsets
such as :
// init
x = 0
y = 0
// in loop, preferably iterating more than once per loop
x += (y >> 2) + (1 << 27)
y -= (x >> 1)
x += (y >> 2) - (1 << 31)
// scale it down when you plot it (here for a 512x512 image) : (x
>> 23), (y >> 23)
adjusting offsets (dissimilar for first x and
second x)
with same offset value for both x, probably
similar to Trinskys
This also works with floats although values for x
and y should be bounded (modulo) to produce the patterns, using
floating
point is flexible and may produce better results.
// init
x = 0
y = 0
for (let i = 0; i < 1e4; i += 1) {
x += (y * 0.25) + (1 << 29)
x %= (1 << 31) // necessary for floats for the
patterns to appear (will be the standard Minsky circle
otherwise)
y -= (x * 0.5)
y %= (1 << 31)
x += (y * 0.25) + (1 << 30)
x %= (1 << 31)
// scale it down when you plot it (here for a 512x512 image)
: (x >> 22), (y >> 22)
}
with floats
back to top