问题标签 [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.
opengl - Mandelbrot 缩放难度
我不确定这个问题与哪个领域相关,但我会试一试。我正在尝试计算 Mandelbrot 集。最大的不同是我的输出是 3D 模型。该集合的计算是精确完成的,但是一旦我尝试缩放到 ax,y 点(位于 2D 平面上),它就无法按预期工作。这里的主要概念是通过提取下一个缩放点,我将能够计算我的集合的新边界边缘。什么时候
结果是缩放到未知点。我猜计算有问题。我试图做以下事情:
编辑:我回顾了你给我的一些例子,但我仍然没有找到最适合我情况的合适答案。
multithreading - 线程安全地更新大型数据矩阵:现在使用数百万个互斥锁?
我正在修改我很久以前写的一些代码,并决定重写它以更好地利用线程(以及更好地利用一般编程......)。
它位于此处:https ://github.com/buddhabrot/buddhabrot/blob/master/basic.c :
这是一个呈现佛像分形的应用程序。由于超出这个问题范围的原因,很难使用记忆化来优化它,基本上如果你对此进行分析,超过 99% 的时间都花在最里面的循环中,最终会:
多个线程将执行此代码。由于递增不是线程安全的,因此我在这部分内存周围使用了特定的互斥锁。因此,buddhabrot 内存中的每个可寻址位置都有一个单独的互斥体。
现在,这当然比使用一个锁更有效(这肯定会使所有线程相互等待),但它的内存效率较低;看来互斥锁也需要一些数据。我还想知道在具有数百万互斥锁的 pthreads 实现中的其他影响?
我现在还有另外两个策略要考虑:
为地图中的每个“区域”使用一组密度较低的互斥锁。因此,例如,对 [col/16][row/16] 的锁定只会在线程访问与另一个线程相同的 16 像素区域时锁定线程。锁的密度可以动态调整。但是当我对此建模时,我想知道我是否没有解决甚至可能由内核实现的现有问题,而且我也无法真正找到一种方法来解决这个问题而不会减慢速度。我也考虑过“互斥树”,但所有这些在这个循环中都太慢了(给出一个指示,在优化编译器背后的一些数学运算的顺序后,我可以多挤出大约 30% 的处理器时间) . 有没有一个主题,我如何寻找更多关于“互斥密度规划”的信息..?
复制每个线程的内存,这样我什至不必围绕它进行互斥。但这更加内存效率低下。它将解决在不知道其影响的情况下拥有数百万个互斥锁的问题。
那么,还有什么,我能做的更好吗?
opengl-es - Opengl ES 2.0、FBO 和片段着色器
这是我的渲染循环:
- 绑定自定义 FBO
- 绑定纹理(以前与 FBO 关联为 COLOR_ATTACHMENT0)
- 使用基于分形算法选择片段颜色的自定义片段着色器进行渲染。(如果算法不使用片段,则将其分配为黑色)
- 重新绑定窗口提供的帧缓冲区和渲染缓冲区。(在 ios 5 上,这是 [view bindDrawable] 方法。
- 将屏幕清除为白色。
- 将 fbo 纹理渲染到一个比窗口本身小很多的框架中。
预期结果:分形应该出现在较小的框架中。框架应该有黑色背景。屏幕的其余部分应该是白色的。
当前结果:整个屏幕都被分形占据,就好像我正在渲染到提供 fbo 的窗口以及我的自定义 fbo/纹理。
我真的不知道我做错了什么,所以我会很感激任何帮助。
编辑:
片段着色器:
FBO 初始化:
渲染循环:
我希望这有帮助。如果您想了解更多关于我在做什么的信息,请告诉我。
我还注意到发生了一些非常奇怪的事情。
如果在绑定 FBO 后,我尝试
...它是实际发生清除的窗口提供的帧缓冲区。
谢谢你们的帮助。
python - 在 Python 中绘制复数?
对于一个数学公平项目,我想制作一个生成 Julia 集分形的程序。为此,我需要在图表上绘制复数。有谁知道如何做到这一点?请记住,我使用的是复数,而不是常规坐标。谢谢你!
python - 如何编写函数将画布上的点映射到真实平面上的点
我正在用 Python 在 pygame 屏幕上编写一个简单的 Mandelbrot 可视化器。对于 600 x 600 屏幕上的每个像素,我正在绘制这个像素 (x, y) 作为复数是否在 Mandelbrot 集中。
问题是我从 (0, 0) 开始并迭代到 (600, 600),其中大部分都在集合之外。所以我加入一个比例因子来放大,但我仍然只绘制右上象限。我想要一些方法,所以我的情节总是以 0+0i 为中心。
我想做的是找到某种方法将 600px^2 画布映射到从 x 轴上的 [-2, 2] 到 y 轴上的 [2, -2] 的真实平面。例如,这意味着复数 0+0i 将映射到屏幕上的 (300, 300)。这样,我的情节将始终居中。
java - 分形和“java.lang.OutOfMemoryError:Java 堆空间”
我在 java 中做Koch 分形雪花并将其保存在 svg 文件中。
我正在使用 LineStrip2D 类来记忆分形(它是实现可迭代的 Vec2D 的 ArrayList 的包装器)。
主要功能是这个:
我有一个带有初始科赫曲线的模式:
我打电话给:
现在的问题:
经过一些迭代(851968)我有一个java.lang.OutOfMemoryError: Java heap space。如何避免此错误并获得巨大的 svg 文件?我想我可以通过不同的步骤来完成这个过程,但我不明白如何以一种聪明的方式实现它。
zooming - 如何将 mandelbrot 的大小转换为其缩放值
我的 mandelbrot 集在 XY 世界中被定义为矩形,
这意味着在任何给定时间我都知道它的最左下角和右上角。有什么方法可以知道从原始大小乘以矩形大小的总缩放百分比值是多少?
谢谢,伊格尔!
algorithm - 在 Mathematica 中迭代生成谢尔宾斯基三角形?
我编写了绘制谢尔宾斯基分形的代码。它真的很慢,因为它使用递归。你们有谁知道我如何在没有递归的情况下编写相同的代码以使其更快?这是我的代码:
编辑:
如果有人感兴趣,我已经用 Chaos Game 方法编写了它。感谢您的精彩回答!这是代码:
android - Android 上的分形应用程序
在android上生成分形曲线的最佳方法是什么?
我应该使用NDK吗?
如果不
扩展View或SurfaceView的正确类是什么
我已经生成了两个扩展View并覆盖onDraw()的分形,当迭代次数很大并且曲线比率太小时,生成速度太慢
opengl - 让 mandelbrot 高度图留在一个地方
我有一个小问题,我的 mandelbrot 集表示为高度图矩阵,当每个单元格包含迭代次数时,它需要一个点达到无穷大或更少。
最后打印一个 3d 模型。当我快速缩放并且我开始看到整个集合浮动时,我的问题出现了(因为每个像素的迭代次数越来越多)。
有没有办法强制模型保持在 0(y 轴)但仍然让它随着每个点的迭代次数不同而增长?
我试图找到需要最少迭代次数的点(基本上是集合中的最低点)并从所有点中减去它,但这没有用。(因为迭代次数会改变它所做的每个缩放过程例如设置从值 5 到 100 的跳转)。