int $index = 0; vector $data[]; proc hilbert(float $x0, float $y0, float $xis, float $xjs, float $yis, float $yjs, int $n) { global int $index; global vector $data[]; if($n == 0) { $data[$index] = <<$x0 + ($xis + $yis)/2, 0.0, $y0 + ($xjs + $yjs)/2>>; $index = $index + 1; } else { hilbert($x0,$y0,$yis/2,$yjs/2,$xis/2,$xjs/2,$n - 1); hilbert($x0 + $xis/2,$y0 + $xjs/2,$xis/2,$xjs/2,$yis/2,$yjs/2,$n - 1); hilbert($x0 + $xis/2 + $yis/2,$y0 + $xjs/2 + $yjs/2,$xis/2,$xjs/2,$yis/2,$yjs/2,$n - 1); hilbert($x0 + $xis/2 + $yis,$y0 + $xjs/2 + $yjs,-$yis/2,-$yjs/2,-$xis/2,-$xjs/2,$n - 1); } } select -all; delete; clear($data); // don't use old data values hilbert(-0.5, -0.5 , 1.0, 0.0, 0.0, 1.0, 5); $cmd = "curve -d 3 -periodic 0 "; float $x = 9, $y, $z; for($n = 0; $n < size($data); $n++) { vector $pnt = $data[$n]; $cmd += " -p " + $pnt; } eval($cmd);