UVA918 ASCII Mandelbrot

题目描述

曼德勃罗集,以博尼特·曼德勃罗的名字命名,是一个分形。 曼德勃罗集是一堆复数构成的集合,复数就是形如 $a+b\sqrt{-1}$ 的数字,我们记 $i=\sqrt{-1}$,这样我们就可以将上面的数记作 $a+bi$,例如 $2.5+3i$。而由于 $i^2=-1$,那么我们就可以这样搞:$(3i)^2=9\times -1=-9$。 然而不幸的是我们没法把 $i$ 放到实数轴上,因此我们只能把它放在虚数轴上,于是我们就有了一个复平面,而序数轴当然与实数轴垂直,如下: ![](https://cdn.luogu.com.cn/upload/image_hosting/nq1ppyjd.png) 这里的平面上标出了一个数 $1+2i$。 曼德勃罗集是复数构成的集合,而我们把它画在复平面上,但是我们需要判定某个复数是否在集合之中,这里我们采用方程 $f(z)=z^2+C$,而后 $z\leftarrow f(z)$,而其中常速 $C$是一个常数,即为我们需要判定的数字。$z$ 一开始是 $0+0i$,而每次我们首先根据 $C$ 计算出 $f(z)$,而后把 $f(z)$ 赋值给 $z$。 我们当然不会关注 $z$ 是怎么变得,我们要关注它的模长 $||z||=\sqrt{(\Re z)^2+(\Im z)^2}$,只要这个 $||z||$ 在某个时候大于 $2$,那么它就会不断地膨胀,并且不会变小,这样他就不属于曼德勃罗集。 只要我们测试尽可能多的复数,而后就能得到这样一张图片: ![](https://cdn.luogu.com.cn/upload/image_hosting/neqchaaf.png) 我们当然可以给曼德勃罗集合外的元素上色,颜色即为其脱出边界值 $2$ 所用的步数。 假若我们想要找到曼德勃罗集合的漂亮之处,我们只需要把图片放大就好了。 你的任务:给定值域,用 ASCII 画一下上面说的东西。

输入格式

$T$ 组数据,每组数据包含下面的一些东西: + 字符串 $C$,头尾带双引号,其中内容(不包含双引号,引号或者)长度为 $12$。 + 两个实数 $\min_\Im$ 和 $\max_\Im$,代表虚数值域 $[\min_\Im,\max_\Im]$。 + 两个实数 $\min_\Re$ 和 $\max_\Re$,代表实数值域 $[\min_\Re,\max_\Re]$。 + 两个实数 $\mathrm{prec}_\Im$ 和 $\mathrm{prec}_\Re$,代表实数和虚数作为一个字符时的最小的精度。 输入它们的顺序是:$C,\min_\Im,\max_\Im,\mathrm{prec}_\Im,\min_\Re,\max_\Re,\mathrm{prec}_\Re$。

输出格式

你需要输出这样的一副图案: ```plaintext [MINI+0*PRECI,MINR+0*PRECR] [MINI+0*PRECI,MINR+1*PRECR] [MINI+0*PRECI,MINR+2*PRECR] (...) [MINI+0*PRECI,B] [MINI+1*PRECI,MINR+0*PRECR] [MINI+1*PRECI,MINR+1*PRECR] [MINI+1*PRECI,MINR+2*PRECR] (...) [MINI+1*PRECI,B] [MINI+2*PRECI,MINR+0*PRECR] [MINI+2*PRECI,MINR+1*PRECR] [MINI+2*PRECI,MINR+2*PRECR] (...) [MINI+2*PRECI,B] (...) (...) (...) (...) (...) [ A,MINR+0*PRECR] [ A,MINR+1*PRECR] [ A,MINR+2*PRECR] (...) [ A,B] ``` 这里每个括号代表一个复数,而 $A,B$ 是最大的小于等于 $\max_\Im,\max_\Re$ 的数字。 只要某个复数的扩展超过了 $2$,那么则用 $C$ 里的第 $i$ 个字符予以标注,其中 $i$ 是迭代的遍数并且在第 $i$ 遍超过 $2$.假若没有超过 $2$,就放一个空格。 输出如上的图像,并且以一个空行分割。