问题标签 [fractals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2518 浏览

c#-4.0 - 如何在 C# 中进行快速复杂算术运算

我现在正在处理一个 C# Fractal Generator 项目,该项目需要大量的复数算术,我正在尝试想办法加快数学运算速度。下面是一组简化的代码,它使用三种数据存储方法中的一种来测试 Mandelbrot 计算的速度,如TestNumericsComplexTestCustomComplex和所示TestPairedDoubles。请理解 Mandelbrot 只是一个示例,我打算让未来的开发人员能够创建插件分形公式。

基本上我认为 usingSystem.Numerics.Complex是一个不错的想法,而使用一对双打或自定义 Complex 结构是可以接受的想法。我可以使用 gpu 执行算术,但这不会限制或破坏可移植性吗?我尝试改变内部循环的顺序(i,x,y)无济于事。我还能做些什么来帮助加快内部循环?我遇到页面错误问题了吗?与浮点值相比,使用定点数系统会提高我的速度吗?

我已经Parallel.For在 C# 4.0 中知道了;为了清楚起见,我的代码示例中省略了它。我也知道 C# 通常不是高性能的好语言。我使用 C# 来利用反射插件和 WPF 窗口。

编辑

GPU 似乎是唯一可行的解​​决方案;我不理会与 C/C++ 的互操作性,因为我觉得速度提升不足以迫使我在未来的插件上强制实现互操作性。

在研究了可用的 GPU 选项(我实际上已经研究了一段时间)之后,我终于找到了我认为是一个很好的折衷方案。我选择了 OpenCL,希望在我的程序发布时大多数设备都支持该标准。OpenCLTemplate使用cloo在 .Net(用于应用程序逻辑)和“OpenCL C99”(用于并行代码)之间提供易于理解的接口。插件可以包括用于硬件加速的 OpenCL 内核以及带有 System.Numerics.Complex 的标准实现,以便于集成。

随着标准被处理器供应商采用,我预计有关编写 OpenCL C99 代码的可用教程的数量会迅速增长。这使我无需对插件开发人员强制执行 GPU 编码,同时为他们提供精心设计的语言(如果他们选择利用该选项)。这也意味着 IronPython 脚本将具有同等的 GPU 加速访问权限,尽管直到编译时才知道,因为代码将直接通过 OpenCL 进行转换。

对于将来有兴趣将 GPU 加速与 .Net 项目集成的任何人,我强烈推荐 OpenCLTemplate。学习 OpenCL C99 有一定的开销。但是,它仅比学习替代 API 稍微困难一些,并且可能会从示例和一般社区获得更好的支持。

0 投票
4 回答
523 浏览

animation - 构建和动画分形

任何人都可以推荐学习和构建分形模式所需的任何软件/书籍吗?我也希望能够为分形图案制作动画。就像winamp的东西。

0 投票
1 回答
339 浏览

imaging - 分形显微镜模拟器

我已经完成了用于控制成像硬件(例如显微镜)的软件的工作,这些软件有时很难花时间使用。这意味着很难测试需要访问仪器的新/不同算法。我想创建一种可用于某些测试目的的合成仪器,并且我正在考虑使用某种分形图像生成来创建合成图像。关键是能够以某种确定的方式在许多不同的“放大倍数”和位置生成特征。这是因为一些正在测试的算法可能需要平移/缩放和重新定位以前“成像”的区域。然后,我可以在这些基础图像上应用任何合适的仪器“缺陷”(焦点、噪声、饱和度等)。

我对如何为基础图像选择/实现一个好的分形算法有点茫然。任何帮助,将不胜感激。最好它具有以下品质:

  1. 快速渲染新的图像区域。
  2. 在尽可能多的位置和规模上进行相当广泛的“功能”覆盖。
  3. 具有确定性(但从随机起始参数初始化)。
  4. 能够调整以使图像看起来更像“真实”图像。

第 2 项很重要,例如具有大的平滑/空白区域的 mandelbrot 集可能不好,因为控制合成范围的软件可能属于这些区域之一。

到目前为止,我已经考虑过使用类似 mandelbrot 的东西,但随机移动/旋转/缩放和合并两个或更多分形集以获得更完整的“特征”覆盖。

我还看到了分形火焰算法的图像,它们似乎生成的图像可能有用(而且看起来很漂亮)。

最后,我考虑过使用某种暂停的粒子模拟运行来生成更像细胞的图像(我当前的成像目标),但我不确定这种方法是否可以满足其他要求。

编辑:@Jeffrey - 所以听起来某种地形生成可能是要走的路,只要我完全控制 PSRNG。也许我可以使用一些存储的初始种子 + x 位置 + y 位置来生成我的随机数?但是我不确定如何跨尺度一致地生成地形,除了,正如你提到的,以最理想的尺度创建基础地形,并在某些预先确定的“放大率”下向这个基础添加新的确定性伪随机变化. 我还必须小心何时生成下一级地形,因为如果我过于激进,我必须适当地生成和整合结果以在更粗略的级别上显示......这就是我最初的原因倾向于更“传统”的分形,

0 投票
2 回答
901 浏览

image-processing - 英特尔图像处理库的开源替换

是否有任何开源库可以替代专有的英特尔图像处理库?首先,我需要使用任意内核进行图像加载保存、过滤(3x3、5x5 等)。支持将像素值存储为浮点数的多通道图像将非常棒。我还需要一个具有良好文档的库。

PS。linux/x86 和 windows/x86。我想在 Windows 上将它与 mingw32 一起使用。

聚苯乙烯。我需要使用这个库解决的第一个任务是计算分形维数。

谢谢

0 投票
2 回答
302 浏览

f# - F# Fractal - 我无法弄清楚的错误

我试图举一个我在网络上找到的例子。这是 F# 中的 3D 分形。这是:http ://tomasp.net/blog/infinite-cheese.aspx 。源代码可在文末下载。文章和示例写于 2007 年,所以我认为代码有点过时。有一段代码会导致错误并且代码无法编译:

关键字带下划线,when错误消息如下:

表达式中出现意外的关键字“when”。应为“->”或其他标记。

我无法弄清楚这有什么问题。为了更好地理解代码,我搜索了语言规范。据我所知,Set.mem函数或->>运算符没有任何关系。你知道有什么问题吗?

0 投票
2 回答
3502 浏览

image-processing - 估计二维图像的分形维数

我想估计二维图像(照片)的某些部分的分形维数。如何计算这个值的估计值,例如 15x15 像素子图像与 rgb 颜色?

谢谢。

0 投票
3 回答
2318 浏览

python - 如何从调色板中进行颜色渐变

我正在研究的这个算法的目标是从一些提供的颜色中输出颜色进展。通过颜色进展,我的意思是在两种颜色(颜色 A、颜色 B)之间创建“淡入淡出”效果,并在其间存储每个颜色值((R,G,B)元组)。

例如,如果提供的是全黑A = (0,0,0)和全白B = (255,255,255),则进展结果将是:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

所以我们一开始是白色的,然后逐渐变成黑色。当然,白色和黑色非常容易(只需将 RGB 每步增加 1 次,共 255 次)。但是如果我想用两种任意颜色来做这个过程,比如 A = (180,69,1) 和 B = (233,153,0)?

重要说明:如果使用十六进制(或任何其他类型的颜色表示法)更容易实现,我也可以使用它,只需指定哪种类型(考虑到我正在使用 PIL(Python 成像库) ,所以如果它与之兼容,我很好)

显然,它必须是尽可能均匀的分布,进展必须是均匀的。

我需要弄清楚这个算法,以便我可以在我的分形生成器中使用它(Mandelbrot Set,如果你愿意,可以在谷歌上搜索它),所以让进程尽可能柔和,没有打嗝很重要。

提前致谢。

0 投票
2 回答
1005 浏览

java - Java 上绘图/卓尔分形的图形库

我正在寻找一个图形库,它允许我以特定颜色绘制像素点,目的是绘制分形(曼德布罗集)。我已经阅读了分形背后的基本数学并且我理解它,算法并不难。

但我不知道我可以使用什么图形库,我不需要任何复杂和复杂的东西,只需打印一个带有颜色的像素集。你有什么建议?开罗?OpenGL?。

注意:我只有 pygtk 的经验。我正在阅读 Java API 并找到了 fillRect 方法和 BufferedImages 但它似乎有点复杂。

谢谢 ;)

0 投票
1 回答
7303 浏览

landscape - 基于现有地形的动态地形生成

这个问题与这里提出的问题非常相似。

我的问题是我有一张地图,如下所示:

主地图

这张地图是使用 2D Perlin 噪声制作的,然后运行创建的高度图,根据相应元素的高度或坡度为地形中的每个元素分配类型和颜色值,非常标准。地图数组是二维的,屏幕尺寸的精确尺寸(每像素像素),所以在 1200 x 800 生成时,在我的装备上大约需要 2 秒。

现在放大突出显示的矩形:

http://i.stack.imgur.com/hrZnM.png

显然,随着尺寸的增加,细节会丢失。这就是问题所在。我想即时创建额外的细节,然后在玩家四处移动时将其写入磁盘(玩家只是一个限制沿网格移动的点)。我看到了两种方法,我很快就想到了第一种方法:

http://i.stack.imgur.com/bbLia.png

这是从旧地形的采样元素创建的新的有偏差的局部地形的放大视图,在上一张图像中由黄色网格空间(中心左侧)突出显示。然而,这个系统需要大量的修改,例如,如果你将一个单元从黄色网格空间的左上方移动到海滩瓷砖上,地形就会完全改变:

http://i.stack.imgur.com/6shKz.png

所以为了让它正常工作,你需要做大量的,我猜这个词应该是插值,以创建一个平滑的过渡,因为玩家在本地世界中移动了 40 个左右的网格空间,需要到达下一个世界在世界各地平铺。这看起来很复杂而且很不雅。

第二种方法是将原始地图的网格分解成更小的位,也许将每个正方形除以 4?我还没有实现这个,我不确定我会如何以一种实际增加细节的方式,但我认为这可能最终成为最好的解决方案。

关于我如何解决这个问题的任何想法?请记住,它必须是本地的和即时的。只是增加地图的分辨率是我想不惜一切代价避免的事情。

0 投票
2 回答
1464 浏览

java - 中点置换地形伪影

我正在尝试在 Java中实现中点位移算法。它也被称为菱形平方算法。我的参考是http://www.lighthouse3d.com/opengl/terrain/index.php3?mpd。除了右侧和底部边缘外,它似乎工作正常。

查看中点位移结果

仔细检查后,可以看到“粗糙”的边缘。谁能指出什么是错的?在该算法的其他在线实现中没有观察到这种效果。

代码

注释

这部分定义了一个变量displacementBound,一个初始化为默认值的二维双精度数组,以及另一个称为迭代的变量。

这部分是声明循环的地方。它将运行mPDIterations循环。创建一个临时数组B以保存A的更新版本,使B大于A以保存新数据点。之后有两个 for 循环,一个嵌套在另一个循环中,它将A的当前值放入临时B中,注意每隔一行和每隔一列留空。看看这个例子:

现在来看下一段代码:

在本节中,中心的每个点,指在西的每个基本方向上都有一个空的相邻单元格的单元格,给定四个相邻点的平均值,并且随机位移值添加到它。这称为钻石步骤。澄清什么是“中心”:

下一个代码部分:

这部分的作用类似于上一段代码。它为每个非中心和空点分配一个新值;该值是北西基本方向上相邻元素的平均值,并添加了另一个随机位移值。这称为方步。上面的代码确保只有非中心点和空点被赋予新值;这些点等同于侧点,如下所述:

下面给出了结束while循环的部分:

根据上述文章中给出的信息,变量displacementBound在上面的部分中被减少,其中包括while 循环的结束。在开始循环的另一次迭代或终止循环之前,通过将B的更新内容分配给 A 来更新A内容

最后,还包括了辅助方法averageFromCornersAndDisplace()averageFromSidesAndDisplace()wrap() ,但不需要对它们进行额外的解释。根本没有包含方法randomDisplacement() 。供您参考,它返回一个以给定数字b为界的随机浮点数x