你们都知道牛顿法可以近似函数的根,不是吗?我在此任务中的目标是向您介绍该算法的一个有趣方面。
牛顿算法仅针对某些但所有复杂的输入值进行收敛。如果您描绘了复杂平面上所有输入值的方法的收敛性,通常会得到一个漂亮的分形,如下所示:
技术指标
此任务的目标是生成此类分形。这意味着,您将获得多项式作为输入,并且必须以您选择的格式将相应的分形作为图像打印输出。
输入项
输入是用空格分隔的复数列表。它们在风格写下来<Real part><iImaginary part>
,这样的数字:5.32i3.05
。您可能会假设输入数字的位数不超过4个且小于1000。它们中的第一个不能为零。例如,这可能是您程序的输入:
1 -2i7.5 23.0004i-3.8 i12 0 5.1233i0.1
数字被解释为从最高幂开始的多项式系数。在本说明书中的其余部分,输入多项式称为P。上面的输入等于这个多项式:
f(x)= x 5 +(-2 + 7.5 i)x 4 +(23.0004-3.8 i)x 3 + 12 i x 2 + 5.1233 + 0.1 i
输入可能来自标准输入,传递给程序的参数或显示给程序的提示。您可以假定输入不包含任何前导或尾随空格字符。
渲染图
您必须通过以下方式渲染分形:
- 选择尽可能多的颜色作为P的根,再加上额外的颜色以发散
- 对于可见平面中的每个数字,确定方法是否收敛,如果是,则收敛到哪个根。根据结果为点着色。
- 不要打印标尺或其他花哨的东西
- 在这些点上打印一个黑点,这些点是定向的多项式根。每个根周围最多可以打印四个像素。
- 找到一种方式来选择可见平面,所有根都是可区分的,并且在可能的情况下在整个平面上广泛分布。尽管不需要完美放置输出框架,但我保留拒绝接受以不可接受的方式选择框架的答案的权利。总是在同一坐标上,所有根都在一个点上,依此类推。
- 输出图像的大小应为1024 * 1024像素。
- 渲染时间最长为10分钟
- 使用单精度浮点值就足够了
输出量
输出应该是您选择的文件格式的光栅图形图像,该图像可由Brand X操作系统的标准软件读取。如果您想使用一种罕见的格式,请考虑添加一个指向网站的链接,从中可以下载该网站的查看器。
将文件输出到stdout。如果您的语言不支持将某些内容添加到stdout,或者您发现此选项不太方便,请尝试另一种方法。无论如何,必须有可能保存生成的图像。
限制条件
- 没有图像处理库
- 没有分形生成库
- 最短的代码胜出
扩展名
如果您喜欢此任务,则可以尝试根据收敛速度或其他标准为点着色。我希望看到一些有趣的结果。