MATLAB,264个 262 161字节
除基本计算希尔伯特曲线的“导数”,然后再通过“求和”“积分”外,该函数的工作原理几乎相同。这将代码大小减少了很多字节。
function c;plot(cumsum([0,h(1,1+i,4)]));axis equal;end function v=h(f,d,l);v=d*[i*f,1,-i*f];if l;l=l-1;D=i*d*f;w=h(f,d,l);x=h(-f,D,l);v=[x,D,w,d,w,-D,-x];end;end
旧版
这只是一种简单的递归方法。为了简单起见,我使用复数来存储矢量信息。您可以在零件上更改曲线h(0,1,1+i,4)
。第一个参数p=0
是初始位置,第二个参数f
是方向(+1
或-1
)的标记,第三个参数d
是应绘制曲线的方向/旋转,第四个参数l
是递归深度。
function c;hold on;h(0,1,1+i,4);axis equal;end function p=h(p,f,d,l);q=@plot;if l;l=l-1;d=i*d*f;p=h(p,-f,d,l);q(p+[0,d]);p=p+d;d=-i*d*f;p=h(p,f,d,l);q(p+[0,d]);p=p+d;p=h(p,f,d,l);d=-i*d*f;q(p+[0,d]);p=p+d;p=h(p,-f,d,l);else;q(p + d*[0,i*f,1+i*f,1]);p=p+d;end;end
这是旧版本中的样子:
这是2015b的样子:
->