问题标签 [mandelbrot]

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 投票
1 回答
816 浏览

c - Mandelbrot 用 C 语言实现缩放

我正在尝试在我的 mandelbrot 代码中实现放大/缩小功能。我部分实现了缩放功能,但是当放大时,它变得模糊并且无法再看到 mandelbrot 集了。

这是我的代码...

PS:这不是作业..

0 投票
1 回答
797 浏览

opengl - Mandelbrot 缩放难度

我不确定这个问题与哪个领域相关,但我会试一试。我正在尝试计算 Mandelbrot 集。最大的不同是我的输出是 3D 模型。该集合的计算是精确完成的,但是一旦我尝试缩放到 ax,y 点(位于 2D 平面上),它就无法按预期工作。这里的主要概念是通过提取下一个缩放点,我将能够计算我的集合的新边界边缘。什么时候

结果是缩放到未知点。我猜计算有问题。我试图做以下事情:

编辑:我回顾了你给我的一些例子,但我仍然没有找到最适合我情况的合适答案。

0 投票
1 回答
1251 浏览

cuda - 为什么在将最大迭代计数设置为高于 5,500,000 时,此用于计算 Mandelbrot 集的 CUDA 代码会失败?

我正在编写一个代码合成器,它将高级模型转换为 CUDA C 代码。作为测试模型,我正在使用 Mandelbrot 生成器应用程序,它在 GPGPU 上并行执行每个 XY 坐标的迭代计数。图像为 70x70 像素,XY 坐标范围从 (-1, -1) 到 (1, 1)。为简单起见,应用程序需要一个大float数组,其中每组 3 个元素包含 X 和 Y 坐标,然后是最大迭代次数。GPGPU 上的每个线程接收一个指向每个 3 组集合开头的指针并计算迭代计数。

当最大迭代次数小于 5,500,000 时,合成的 CUDA 代码可以完美运行,但当它高于该值时,输出就完全是假的。为了说明,请参见以下示例:

max_it设置为 5,000,000时的正常输出:

max_it设置为 6,000,000时的虚假输出:

下面是代码:

mandelbrot.cpp(主文件)

mandelbrot.h(头文件)

mandelbrot.cu(CUDA 文件)

有趣的文件是mandelbrot.cu包含计算代码的文件;mandelbrot.cpp只是一个获取用户输入并生成输入数据的驱动程序,并且mandelbrot.h只是一个头文件,因此mandelbrot.cpp可以轻松使用mandelbrot.cu.

该函数executeModel()是一个包装函数,负责在模型中的进程之间传播数据。在这种情况下,只有一个过程,因此executeModel()毫无意义。

parallelmapSY_1__kernel_wrapper()通过在设备上分配内存来准备并行执行,传输输入数据,调用内核,并将结果传输回主机。

parallelmapSY_1__kernel()是核函数,它只是parallelmapSY_1_func1()用适当的输入数据调用。当产生太多线程时,它还会阻止执行。

所以真正感兴趣的领域是parallelmapSY_1_func1()。正如我所说,当最大迭代次数小于 5,500,000 时,它可以完美运行,但是当我更高时,它似乎并没有按预期工作(请参阅上面的输出日志)。有些人可能会问“你为什么将迭代次数设置得这么高?这没有必要!”。是的,但是由于纯 C 等效项可以在更高的最大迭代次数下完美运行,为什么 CUDA 版本不应该呢?由于我正在设计一个通用工具,我需要知道为什么它在这个示例中不起作用。

那么有没有人知道当最大迭代次数超过 5,500,000 时,代码会出现什么错误?

0 投票
1 回答
4880 浏览

c++ - 如何对 Mandelbrot 集执行简单缩放

我对 Mandelbrot 设置“缩放”视图和与之相关的数学有一个一般性的问题。我已经用值实现了 256 X 256 窗口大小的 mandelbrot 集

接下来,我选择一个正方形区域,这些是最左上角 (76,55) 和最右下角 (116, 99) 的坐标(选择 44 边的正方形)

所以,我选择x2 = x1 + 44 ; y2 = y1 + 44;

如何将这些新坐标转换为复平面?以及新的实值和虚值将如何变化以便为新值集计算它?

这是我到目前为止所尝试的..

我很难弄清楚数学,还有关于生成“缩放”视图,感谢任何帮助!

0 投票
2 回答
1204 浏览

c++ - 多核编程 / Mandelbrot Set / c++

我对“ppl.h”标头的 Concurrency::parallel_for 算法有疑问。这个例子来自 Ivor Horton 的书 - “Beginning Visual C++ 2010”。

链接到完整的 .cpp 文件: http : //media.wiley.com/product_ancillary/83/04705008/DOWNLOAD/500880ch13.zip "Ch13/Ex13_03/Ex13_03.cpp"

在这个特定示例中,他展示了如何使用并行计算构建 Mandelbrot 集。

处理它的函数是:

基本上,这个函数会渲染 Mandelbrot 集,它是在IteratePoint函数中计算的。

像素的水平行以随机顺序呈现。我的问题是 -Concurrency::parallel_for算法究竟如何决定窗口的哪个区域(即一组“y”水平像素行)由哪个核心呈现。

ps工作示例在这里:http ://hotfile.com/dl/137661392/d63280a/MANDELBROT.rar.html

感谢您的时间!

0 投票
1 回答
622 浏览

opengl - 使用 CUDA VBO 绘制 OpenGL 高度图

我之前在这里问过几个关于 VBO 的问题,根据我收到的评论,我决定必须采取一种新的方法。

简而言之 - 我正在尝试绘制在大型 FLOAT 数组上定义的 Mandelbrot 集,大约 512X512 点。我的程序的目的是让用户控制缩放和世界的方向(它是一个 3d 模型)。到目前为止,我已经使用 GL_TRIANGLE_STRIP 绘制了整个东西,由于其缓慢的绘制过程,这变成了一个糟糕的选择。也因为实现我的绘画风格(调用 glVertex 的顺序)变得不可能为 VBO 编码。

所以我有几个问题。

即使在此描述之后,我也不确定 VBO 是否是最佳选择,因为由用户来控制计算。对于他由程序引起的每个计算,我必须重新计算 mandelbrot 集(~60ms),然后重新复制指向缓冲区的点:一个需要一些时间(?ms)的过程。

该程序还允许用户在世界上移动,因此这里不进行任何计算,因此 VBO 是一个很好的选择。

1.绘制高度图的最佳方法是什么(当数组中的每个单元格只包含高度时)

2.我如何将它应用到 VBO 并将其传输到 cuda (cudaRegisterBuffer 或类似的东西)

3.有没有办法区分模式并决定何时需要 VBO(在无计算模式下)和何时不需要(计算模式)。

0 投票
2 回答
260 浏览

zooming - 如何将 mandelbrot 的大小转换为其缩放值

我的 mandelbrot 集在 XY 世界中被定义为矩形,
这意味着在任何给定时间我都知道它的最左下角和右上角。有什么方法可以知道从原始大小乘以矩形大小的总缩放百分比值是多少?
谢谢,伊格尔!

0 投票
4 回答
2333 浏览

opengl - 着色曼德布罗集

我想出了这样的事情:

我尝试过几种方法,但大多数时候都以单色结束,或者整个屏幕都以相同的颜色结束。

如何正确设置颜色?

0 投票
2 回答
2007 浏览

3d - 曼德布罗集很快达到极限

我正在计算 mandelbrot 集,能够使用 OpenGL 将其缩放并打印到屏幕上。

如您所知,mandelbrot 集由一个矩形(右上角和左下角)定义,每次我“放大”和“缩小”时,我都会通过将左下点移动到右上角和右上角反之亦然。最终,这 2 个点应该会相遇并完成缩放过程。
根据许多 YOUTUBE 电影,我可以清楚地看到有些电影可以让您达到 1000 倍变焦。在我的程序中,我几乎无法达到 X6。在调试时,我可以看到我的 2 点,它们定义了 mandelbrot 集到达彼此(x1,y1) = (x2,y2)
几件事:
(x1,y1) & (x2,y2)被定义为浮点数。我应该使用 double 代替吗?我的 mandelbrot 由 (512X512) 点定义。够了吗?虽然我不确定它是否与问题有关。

我面临的另一个问题是 - 我将集合打印为高度图(3D 集合)。当每个 Y 分量代表某个点达到无穷大所需的迭代次数时。但是,每次我放大整个集合时,我的相机位置都会越来越高,最终我的相机被集合消耗掉了。有没有办法计算差异并将相机从集合中移开(相应地从缩放点移开?)

计算集合的代码:

一些事情 :

instance->FoundPointOnHost = 我要放大的点。
instance->constVal = 包含集合的原始大小(开始等于 [xru,yru] [xld,yld])
(xru,yru) = 右上角集合的点 (xld,yld) = 集合的左下点

谢谢!

0 投票
1 回答
247 浏览

opengl - 让 mandelbrot 高度图留在一个地方

我有一个小问题,我的 mandelbrot 集表示为高度图矩阵,当每个单元格包含迭代次数时,它需要一个点达到无穷大或更少。
最后打印一个 3d 模型。当我快速缩放并且我开始看到整个集合浮动时,我的问题出现了(因为每个像素的迭代次数越来越多)。
有没有办法强制模型保持在 0(y 轴)但仍然让它随着每个点的迭代次数不同而增长?

我试图找到需要最少迭代次数的点(基本上是集合中的最低点)并从所有点中减去它,但这没有用。(因为迭代次数会改变它所做的每个缩放过程例如设置从值 5 到 100 的跳转)。