2009-12-03 71 views
4

我感兴趣的是建立包含重复图案,类似于两(公共领域)以下图片中,Flower of Life海报大小的图像和Penrose tiling编程使用基于数学的图像在高分辨率艺术品

我的问题:

  1. 怎样的人通常喜欢创建它们的计算机上的图像?我希望答案不是,“打开Adobe Illustrator并猜测交点”,因为这些点可以用数学方法来定义。但我也想象,并非每个对几何图案感兴趣的人都熟悉编程。
  2. 什么是创建这种图像的最佳环境?特别是,从Java,Python,Processing等中获取高分辨率图像的最佳方式是什么?或者,Mathematica是最好的工具吗?

实际上计算积分和做数学并不是难的部分,在我看来(至少这不是这个问题的焦点)。 我对从程序中获得高质量视觉产品的最佳方式感兴趣。

回答

4

创建相似图片这些是学会写的PostScript的最佳方式。这是一种干净的语言,易于学习,而且一旦你了解得很清楚,它就非常强大。

比尔卡斯尔曼的manuals是迄今为止高品质数学插图的最佳参考。

+0

Postscript是一种功能强大的语言,一旦你习惯了它是基于堆栈的。 – 2009-12-03 19:28:07

1

使用像SVG这样的矢量图像格式。这将完全适用于任何分辨率。

Inkscape是创建这些的好工具。

一旦你有了一个矢量图像格式,根据你选择的语言,在编程语言中使用它有很多选择。

例如 -

+1

这甚至不回答:-) – Joey 2009-12-03 16:34:40

+0

两个问题,一个是仰视的联系 - 但它确实回答第一个问题,现在第二个是回答,至少有一个选项。 – 2009-12-03 16:35:15

+0

我仍然认为没有答案的基本问题。矢量格式对这些图像有好处是显而易见的,而且没有问题,但是通过编程生成这些格式仍然比Inkscape,imho更好。 – Joey 2009-12-03 16:40:22

1

那么,#2将会是一场神圣的战争,所以我会解决#1。 :)

这种性质的图像的关键是递归。基本上它们是以一种可控制的方式反复重复的相同图像,以获得相互间的结果。以生命之花为例。你重复中心花瓣六次(花瓣的做法取决于你)。然后用花瓣尖端作为中心并重叠其中一个花瓣制作六朵花。然后你递归地向外移动。几轮“回合”后,你停下来画出包含圆圈。基本上,如果你是用手工完成的话,回忆会模拟印章,移动和旋转。

当我玩弄这些东西时,我总是发现实验是获取酷炫新事物的最佳方式。当然,这可能只是我缺乏想象力。 :)

我知道我在这个答案不是很重的数学,但这取决于你和实验。请记住,COS和SIN是你的朋友,并且在cricle中有360度角度(或者根据你的数学软件包有2pi弧度)。

编辑:添加一些数学的“花”

与(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)

一旦你计算花瓣尖,只画花瓣,然后在开始新花小费。您还将设置一个边界圆,以便该圆外的任何点都不会被绘制。

0

我会尝试使用Java中的iText创建PDF。 PDF支持矢量图形,因此它应该可以无障碍地扩展。我不知道iText如何衡量w.r.t.当你有非常多的图形元素时的性能。

0

A1。你可能想看看海龟图形,L-系统,迭代函数系统,空间填充曲线,以及可能还有很多我不熟悉或尚未考虑过的其他方法。

A2。您可以使用您建议的任何语言对这些文件进行编程。我喜欢Mathematica,但我知道不是每个人都有它的副本,我有一个副本'因为我在数字处理工作,并开始玩它制作漂亮的图片。但是Processing是免费的,其设计是为了让艺术家友好,并且可能是一个更好的起点。 Mathematica和Processing都是在那里做图形,然后不需要调用外部库(或者担心使用哪个库)。

而且,虽然我同意所有人都说矢量是要走的路,但不要忘记,最终的制作步骤,在纸张或屏幕上,渲染,让我们思考如何完成。例如,这可能会导致您使用Postscript或PDF作为输出格式。

玩得开心

马克

0

那么,我曾经用一个指南针画画,然后在初中......其实很简单......但我不认为这就是你要找的答案。

基本上它是从每个点画出一个半径相同的圆,直到遇到大圆圈(极限)。

1

我不知道这些图像是如何创建的,我猜想他们是从一本书中扫描出来的,但是在我的分形工作中,我倾向于从使用<canvas>标签开始,主要是为了能够改变元素的大小,并看到它绘制更多的迭代,所以我可以得到最高分辨率。

这就是像SVG这样的问题,你需要选择一个分辨率然后创建它,它可以上下扩展,但是如果你在一个分辨率下开发它,那么你会更高解决方案演示,你可能会看到比你想要的更多的差距。

如果你想要做它并将它保存为一个静态图像,那么任何GUI都可以工作,因为你在那个时候保存了一个GIF,但是如果你想要它,例如在网页上,它看起来不错,因为它可以在该浏览器,那么你可能想看看使用JavaScript。

数学部分并不难,所以绘制的图像,是相当容易的,一旦你得到所需要的递归算法。我倾向于进行下一次迭代,直到大小低于阈值,例如,半径为< 3,然后退出。