创建这样的图片最好的方法是学习编写PostScript语言。这是一种干净的语言,易于学习,一旦掌握它,就非常强大。
Bill Casselman的手册是高质量数学插图方面的最佳参考资料。
好的,第二个问题可能会引起一场宗教战争,所以我来回答第一个。:)
这种类型图片的关键是递归。基本上,它们是同一幅图像以受控制的方式重复出现,以获得有趣的结果。以生命之花为例。您要重复中心花瓣六次(做花瓣的方法由您决定)。然后使用花瓣尖端作为中心并重叠其中一个花瓣,创建六朵更多的花。之后再进行递归移动向外。几次“循环”后停止并绘制包含圆。基本上,递归模拟了手动完成时所需的盖章、移动和旋转。
当我玩这些东西时,我总是发现实验是获得酷炫新事物的最佳方法。当然,这可能只是我的想象力不够。:)
我知道在这个答案中,我没有讲太多数学,但这取决于您的实验。只要记住 COS 和 SIN 是您的朋友,并且圆上有 360 度(或者根据您的数学软件,是 2pi 弧度)。
编辑:为“Flower”添加一些数学公式
从中心(Xo,Yo)开始,花的半径为 r...
花瓣的顶点(P0,P1等)由...确定。
X = Xo + (sin((n * pi)/3 + (pi / 6)) * r)
Y = Yo - (cos((n * pi)/3 + (pi / 6)) * r)
其中n是花瓣数(0..5)
计算出一个花瓣的顶点后,只需绘制花瓣,然后在其顶点开始一个新的花朵。您还应该设置一个边界圆,以便任何在该圆外的点都不会被绘制。
我不知道那些图片是如何创建的,我猜它们是从书上扫描的,但是在我的分形项目中,我倾向于仅使用<canvas>
标签,这样我可以更改元素的大小并查看绘制的迭代次数,以便获取最高分辨率。
这就是像SVG这样的东西存在的问题,你需要选择一个分辨率来创建它,并且它会很好地缩放,但是如果你在一个分辨率上进行开发,然后转到更高的分辨率演示,则可能会看到比您想要的更多的间隙。
如果您只想这样做并将其保存为静态图像,则任何GUI都可以使用,因为此时正在保存GIF,但是如果您希望它例如出现在网页上,并且在该浏览器上看起来尽可能好,则您可能需要考虑使用JavaScript。
数学部分并不难,因此在推导出所需的递归算法后,绘制图像相当容易。我倾向于一直迭代到大小低于阈值(例如,半径<3),然后退出。
我会尝试使用Java中的iText创建PDF。 PDF支持矢量图形,因此应该可以无问题地进行缩放。但是当您拥有大量图形元素时,我不知道iText在性能方面的缩放效果如何。
A1. 你可能想要看看海龟图形、L-系统、迭代函数系统、空间填充曲线,以及我不熟悉或还没有想到的其他方法。
A2. 你可以使用任何一种语言来编写这些程序。我喜欢Mathematica,但我知道并非每个人都有它的副本,而我有一个副本,因为我从事数字计算工作,并且可以用它来制作漂亮的图片。但是Processing是免费的,旨在为艺术家提供友好的界面,可能更适合你入门。Mathematica和Processing都可以直接进行图形处理,无需调用外部库(或担心使用哪些库)。
虽然我同意所有认为向量是正确选择的人,但不要忘记最终的生产步骤,即渲染到纸张或屏幕上,因此要考虑如何完成这一步骤。例如,这可能会引导你选择Postscript或PDF作为输出格式。
玩得开心
马克
嗯,我曾经在初中时用圆规画生命之花……其实非常简单……但我不认为这是你要找的答案。
基本上,它包括从每个点画出相同半径的圆,直到遇到大圆(限制)。