分形在编程中的实际应用

Posted

技术标签:

【中文标题】分形在编程中的实际应用【英文标题】:Practical Uses of Fractals in Programming 【发布时间】:2011-01-05 17:05:12 【问题描述】:

分形对我来说一直是个谜。

分形在各种编程问题领域有哪些实际用途(除了渲染成漂亮的图像)?请不要只列出使用它们的区域。我对特定的算法以及如何将分形与这些算法一起使用来解决实践中的问题感兴趣。请至少给出算法的简短描述。

【问题讨论】:

【参考方案1】:

人们可以使用计算机科学算法来计算黑白图像的分形维数豪斯多夫维数。 实现起来并不难。

原来这是used in biology and medicine 用于分析细胞样本,例如,分析癌细胞的侵袭性如何,或者疾病的发展程度。细胞通常越健康,维度越高,这意味着您希望癌症样本的分形维度越低。

【讨论】:

【参考方案2】:

分形用于analyzing 股票价格的金融。也用于研究复杂系统(复杂性理论)和art。

【讨论】:

您有什么特定的算法可以证明分形在分析股票价格方面非常有用吗?在您提供的链接中,作者最后说赫斯特指数估计(他在做什么)似乎对分析金融时间序列没有多大用处。关于复杂性理论研究中使用哪些算法来实现分形实用性的一些示例怎么样?【参考方案3】:

用于图像压缩,任何手机,天线芯片设计是最大表面积的分形,纹理生成,山脉生成,理解树木,悬崖,水母,模拟任何有一定程度递归和自我的自然现象不同尺度的相似性。很多科学应用。

【讨论】:

【参考方案4】:

分形理论的另一个用途是分形图像插值。例如,Perfect Resize 7 正在使用分形来调整质量非常好的图像大小。它们很可能使用分区迭代函数系统 (PIFS),假设图像的不同部分彼此自相似。该算法基于搜索图像的自相似部分并描述它们之间的转换。

【讨论】:

【参考方案5】:

沿希尔伯特曲线的误差扩散。

这是一个简单的想法 - 假设您将图像转换为 0-1 黑白位图。将 55% 亮度像素转换为白色会产生 +45% 的误差。在处理下一个像素时,您不会忘记它,而是保留 45% 以考虑在内。假设它的值为 80%。通常它会被转换为白色,但相邻像素太亮,因此考虑到 +45% 的误差,将其转换为黑色(80%-45%=35%),保持 -35% 的误差为传播到下一个像素。

这样 75% 的灰色区域将具有接近 75/25 的白/黑像素比,这很好。但是如果你从左到右处理像素,错误只会在一个方向上传播,这会产生更糟糕的图像。输入空间填充曲线。沿希尔伯特曲线处理像素可以获得误差扩散的良好局部性。更多here,附图。

【讨论】:

【参考方案6】:

Peano 曲线是一种空间填充分形,它允许您使用一维路径均匀地覆盖二维区域(或更高维区域)。如果您在多维数组上执行本地操作,则以空间填充曲线顺序存储和/或访问数组数据可以提高缓存的一致性,适用于所有级别的缓存。

【讨论】:

希尔伯特曲线是另一个例子。有关实际实现,请参阅我的帖子:blog.notdot.net/2009/11/… 如果我没记错的话,世嘉 Dreamcast 的 'swizzled' 纹理格式使用它来在其平铺渲染图形架构上获得更高的缓存命中率。【参考方案7】:

Fractal image compression。还有更多的应用程序被认为不是编程here。

【讨论】:

你有什么具体的分形图像压缩算法的例子可以让人们知道吗? 恐怕不行。大约十年前,我接触过这些算法,但没有跟上。 那是因为分形图像编码器根本没有获得对变换编码器的吸引力。【参考方案8】:

绝对是计算机图形学。这不是关于生成美丽的抽象图像,而是真实且不重复的风景。阅读Fractal Landscapes。

Perlin Noise,可能被认为是一个简单的分形,在计算机图形学中无处不在。作者开玩笑说,如果他给它申请专利,他现在就会成为百万富翁。分形也用于animation 和有损image compression。

【讨论】:

另一个在计算机图形学中使用分形的例子是生成逼真的植物:en.wikipedia.org/wiki/L-system

以上是关于分形在编程中的实际应用的主要内容,如果未能解决你的问题,请参考以下文章

单片机C语言 -- 结构体与指针在编程中的应用

什么是回调,回调在编程中的含义

链接脚本在编程中的高级运用之二——运行时库和C++特性支持

java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

编程结构:Promise和Future

除了 AND/OR/NOT,其他逻辑运算符在编程中的意义何在?