Guest User

G'MIC Hilbert Curve Animation

a guest
Feb 14th, 2026
144
0
Never
5
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.18 KB | Science | 0 0
  1. # Generate an animation that draws the Hilbert curve.
  2. anim_hilbert :
  3.  
  4.   # Precompute Hilbert curve.
  5.   0 eval "
  6.    const n = 3 + 1;
  7.    const N = 1<<n;
  8.    repeat (N^2,d,
  9.      for (x = y = 0; t = d; s = 1, s<N, s<<=1,
  10.        rx = 1&(t>>1); ry = 1&xor(t,rx);
  11.        !ry?(rx==1?(x = s - 1 - x; y = s - 1 - y); swap(x,y));
  12.        x+=s*rx; y+=s*ry; t>>=2;
  13.      );
  14.      da_push([x,y]);
  15.    ); da_freeze()" => pts
  16.   r. 1,{h*5},1,2,5 b. y,0.1% n. -0.5,0.5
  17.  
  18.   # Generate frames for curve generation.
  19.   repeat {pts,h} {
  20.     +rows[pts] 0,$> 600,600
  21.     eval.. "
  22.      begin(
  23.        const zoom = lerp(15,0.7,$%^0.15);
  24.        const fact = 0.95*w#-1*zoom;
  25.        angle = lerp(0,360*4,$%)°;
  26.        R = rot(angle);
  27.        Pc = I[-1,2];
  28.      );
  29.      pP = J[-1,1]; P = I;
  30.      pP = Pc + R*(pP - Pc); P = Pc + R*(P - Pc);
  31.      Off = lerp(Pc,0,$%^10); pP-=Off; P-=Off;
  32.      polygon(#-1,2,round(w#-1/2 + pP*fact),round(w#-1/2 + P*fact),1,1)"
  33.  
  34.     dilate_circ. {lerp(60,5,$%^0.25)}
  35.     +b. {lerp(8,0.5,$%^0.25)}%,3 *. 600 c. 0,255
  36.     *.. 255 to_rgb.. map. hot
  37.     max[-2,-1]
  38.     r. 500,500,1,3,0,0,0.5,0.5
  39.     w. wait 10
  40.     rs. 50% on. frame.jpg,$>
  41.     rm[-2,-1]
  42.   }
Tags: gmic
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment