Math 为用于高分辨率艺术品的基于数学的图像编程

Math 为用于高分辨率艺术品的基于数学的图像编程,math,geometry,trigonometry,Math,Geometry,Trigonometry,我感兴趣的是创建包含重复模式的海报大小的图像,类似于下面的两个(公共域)图像,和: 我的问题是: 人们通常如何在计算机上创建这样的图像?我希望答案不是“打开Adobe Illustrator并猜测交点”,因为这些点可以用数学方法定义。但我也认为并非所有对几何模式感兴趣的人都熟悉编程 创建此类图像的最佳环境是什么?特别是,从Java、Python、处理等中获取高分辨率图像的最佳方法是什么?或者,Mathematica是最好的工具吗 实际上,在我看来,计算分数和做数学并不是难的部分(至少,这不是这

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

我的问题是:

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

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

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

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

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

    比如说-

    • .NET-
    • 动作脚本-
    • C++-
    • WPF/Silverlight的XAML-(将SVG转换为XAML)
    好吧,第二次世界大战将是一场圣战,所以我将讨论第1次世界大战:

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

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

    我知道我在这个答案中数学不是很重,但这取决于你和实验。只要记住,因为和罪是你的朋友,一个圆有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)


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

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

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

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

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

    玩得开心


    标记

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


    比尔·卡塞尔曼的是迄今为止高质量数学插图的最佳参考。

    好吧,我在初中时曾用指南针画过生命之花。。。其实很简单。。。但我认为这不是你想要的答案


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

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

    这就是SVG的问题所在,您需要选择一个分辨率,然后创建它,它可以很好地向上和向下扩展,但是如果您以一个分辨率开发它,然后转到更高的分辨率进行演示,您可能会看到比您希望的更多的差距

    如果您只想这样做并将其保存为静态图像,那么任何GUI都可以工作,因为此时您正在保存GIF,但是如果您想要它,例如,在网页上,并使它在浏览器上看起来尽可能好,那么您可能希望使用javascript


    数学部分并不难,因此一旦推导出所需的递归算法,绘制图像就相当容易了。我倾向于进入下一个迭代,直到大小低于阈值,例如,半径<3,然后退出。

    这甚至没有回答两个问题中的一个:-)正在查找链接-但它确实回答了第一个问题,第二个问题