Mathematica,409个字节
{n,p}=Input[];m=999;Clear@f;_~f~_=0;0~f~0=1;r=RandomInteger;For[i=0,i<m,++i,For[x=m;y=0,f[x+1,y]+f[x-1,y]+f[x,y+1]+f[x,y-1]<1,a=b=-m;While[x+a<0||y+b<0||(y+b)/(x+a)>Tan[Pi/6],a=-r@1;b=r@2-1];x+=a;y+=b];x~f~y=1];Graphics[{White,g=Point/@Join@@{c=Cases[Join@@Table[{i,j}-1,{i,m},{j,m}],{i_,j_}/;i~f~j>0],c.{{1,0},{0,-1}}},Array[Rotate[g,Pi#/3,{0,0}]&,6]},Background->Black,ImageSize->n*p,ImageMargins->n(1-p)/2]
取消高尔夫:
{n,p}=Input[];
m = 999;
ClearAll@f;
_~f~_ = 0;
0~f~0 = 1;
r = RandomInteger;
For[i = 0, i < m, ++i,
For[x = m; y = 0,
f[x + 1, y] + f[x - 1, y] + f[x, y + 1] + f[x, y - 1] < 1,
a = b = -m;
While[x + a < 0 || y + b < 0 || (y + b)/(x + a) > Tan[Pi/6],
a = -r@1;
b = r@2 - 1
];
x += a;
y += b
];
x~f~y = 1
];
Graphics[
{White, g =
Point /@
Join @@ {c =
Cases[Join @@ Table[{i, j} - 1, {i, m}, {j, m}], {i_, j_} /;
i~f~j > 0], c.{{1, 0}, {0, -1}}},
Array[Rotate[g, Pi #/3, {0, 0}] &, 6]},
Background -> Black,
ImageSize -> n*p,
ImageMargins -> n (1 - p)/2
]
这需要输入形式{n,p}
,其中n
是以像素为单位的图像大小,p
是雪花所覆盖图像的百分比。
用给定的参数生成雪花大约需要半分钟的时间。您可以通过改变价值加速它m
的999
到99
,但随后的结果看起来有点稀疏。同样,您可以使用较大的数字来提高质量,但是这将花费很长时间。
我正在一个整数网格上形成布朗树,在处放置新粒子{999, 0}
,然后将其随机向左或向上或向下移动(而不是向右移动),直到它们碰到现有粒子。我还将运动限制在0到30度之间。最后,我在x轴上反射该楔形,并显示其5圈旋转。
以下是一些结果(点击查看大图):
这是布朗树生长的两个动画(每帧每楔形10个粒子):