代码之家  ›  专栏  ›  技术社区  ›  David Koelle

为用于高分辨率艺术品的基于数学的图像编程[关闭]

  •  3
  • David Koelle  · 技术社区  · 16 年前

    我对创建包含重复模式的海报大小的图像感兴趣,类似于下面的两个(公共域)图像 Flower of Life Penrose tiling :

    我的问题是:

    1. 我希望答案不是“打开Adobe Illustrator并猜测交点”,因为这些点可以用数学方法定义。但我也认为并非所有对几何模式感兴趣的人都熟悉编程。
    2. 特别是,从Java、Python、处理等中获取高分辨率图像的最佳方法是什么?或者,Mathematica是最好的工具吗?

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

    7 回复  |  直到 9 年前
        1
  •  5
  •   Stephen Canon    16 年前

    创建这样的图像的最佳方法是学习编写PostScript。这是一门干净的语言,易学,一旦你熟悉了它,它就会非常强大。

    manuals 是迄今为止高质量数学图解的最佳参考。

        2
  •  1
  •   Reed Copsey    16 年前

    使用矢量图像格式,如 SVG

    Inkscape 是一个伟大的工具来创建这些。

    一旦有了矢量图像格式,就可以在编程语言中使用它,这取决于您选择的语言。

        3
  •  1
  •   James Black    16 年前

    我不知道这些图像是如何产生的,我猜它们是从一本书中扫描出来的,但是,在我的分形工作中,我倾向于从使用 <canvas> 标记,主要是为了更改元素的大小,并看到它绘制了更多的迭代,以便获得最高的分辨率。

        4
  •  1
  •   Craig    16 年前

    好吧,第二场战争将是一场圣战,所以我要讲第1场

    这种性质的图像的关键是递归。基本上,它们是相同的图像,以可控的方式反复重复,以获得有趣的结果。以生命之花为例。将中心花瓣重复六次(花瓣的制作方法由您决定)。然后,使用花瓣尖端作为中心并重叠其中一个花瓣,再创建六朵花。然后递归地向外移动。在几轮之后,你停下来画包含的圆。基本上,如果你用手做的话,递归模拟了所需的戳、移动和旋转。

    当我玩弄这些东西的时候,我总是发现实验是获得新鲜事物的最好方式。当然,这可能只是我缺乏想象力

    我知道我在这个答案中数学不是很重,但这取决于你和实验。只要记住,因为和罪是你的朋友,一个圆有360度(或2pi弧度,取决于你的数学包)。

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

    花瓣的顶端(P0、P1等)由。。。

    X = Xo + (sin((n * pi)/3 + (pi / 6)) * r)
    Y = Yo - (cos((n * pi)/3 + (pi / 6)) * r)
    

    其中n是花瓣数(0..5)

    计算花瓣尖端后,只需绘制花瓣,然后在尖端开始新的花朵。您还可以设置一个边界圆,以便不绘制该圆外的任何点。

        5
  •  0
  •   starblue    16 年前

    我会尝试用Java的iText创建一个PDF。PDF支持矢量图形,因此它的缩放应该没有问题。我不知道当你有大量的图形元素时,iText能很好地衡量w.r.t.的性能。

        6
  •  0
  •   High Performance Mark    16 年前

    A1。你可能想看看海龟图形,l-系统,迭代函数系统,空间填充曲线,还有很多我不熟悉或还没有想到的其他方法。

    A2。您可以使用您建议的任何语言对其中任何一种进行编程。我喜欢Mathematica,但我知道不是每个人都有它的副本,我也有它的副本,因为我从事数字运算工作,并开始玩它来制作漂亮的图片。但处理是免费的,它的设计是为了方便艺术家,对你来说可能是一个更好的起点。Mathematica和Processing都在那里进行图形处理,不需要调用外部库(或者担心使用哪个库)。

    而且,虽然我同意大家所说的向量是前进的方向,但不要忘记,最终的制作步骤,在纸上或屏幕上,是渲染,所以请考虑一下如何完成。例如,这可能会导致您使用Postscript或PDF作为输出格式。

    玩得高兴

    做记号

        7
  •  0
  •   Rook    16 年前

    嗯,我以前用指南针画生命之花,那时候在初中。。。其实很简单。。。但我认为这不是你想要的答案。

    基本上,它包括从每个点绘制一个半径相同的圆,直到遇到大圆(极限)。