我没有任何编程分形的经验。我当然看过著名的曼德尔布洛特的照片之类的。
你能为我提供简单的分形算法吗?
编程语言并不重要,但我最熟悉的是actionscript,C#,Java。
我知道,如果我在谷歌上搜索分形,我会得到很多(复杂的)信息,但我想从一个简单的算法开始,并尝试它。
改进基本算法的建议也是受欢迎的,比如如何让它们变成那些可爱的颜色等等。
发布于 2009-01-08 21:28:31
对Mandelbrot进行编程很容易。
我的快速代码如下(不能保证没有bug,但有一个很好的大纲)。
轮廓如下:Mandelbrot集位于复杂网格中,完全位于半径为2的圆内。
所以,从扫描那个矩形区域中的每个点开始。每个点代表一个复数(x + yi)。迭代该复数:
[new value] = [old-value]^2 + [original-value]
,同时跟踪两件事:
1.)迭代次数
2.)新值与原点的距离。
如果你达到了最大的迭代次数,你就完成了。如果与原点的距离大于2,则完成。
完成后,根据迭代次数对原始像素进行着色。然后移动到下一个像素。
public void MBrot()
{
float epsilon = 0.0001; // The step size across the X and Y axis
float x;
float y;
int maxIterations = 10; // increasing this will give you a more detailed fractal
int maxColors = 256; // Change as appropriate for your display.
Complex Z;
Complex C;
int iterations;
for(x=-2; x<=2; x+= epsilon)
{
for(y=-2; y<=2; y+= epsilon)
{
iterations = 0;
C = new Complex(x, y);
Z = new Complex(0,0);
while(Complex.Abs(Z) < 2 && iterations < maxIterations)
{
Z = Z*Z + C;
iterations++;
}
Screen.Plot(x,y, iterations % maxColors); //depending on the number of iterations, color a pixel.
}
}
}
遗漏的一些细节如下:
1.)准确地学习复数的平方是什么以及如何计算它。
2.)弄清楚如何将(-2,2)矩形区域转换为屏幕坐标。
发布于 2009-01-08 21:29:00
有一本名为Chaos and Fractals的好书,在每一章的末尾都有简单的示例代码,实现了一些分形或其他示例。很久以前,当我读到那本书的时候,我把每个示例程序(用一些基本的方言)转换成了一个在网页上运行的Java applet。小应用程序在这里:http://hewgill.com/chaos-and-fractals/
其中一个示例是一个简单的Mandelbrot实现。
发布于 2009-01-08 22:12:29
另一个值得学习的优秀分形是Sierpinski三角形分形。
基本上,绘制一个三角形的三个角(等边是首选的,但任何三角形都可以),然后在其中一个角上开始一个点P。将P随机移动到3个角中的任意一个,并在那里绘制一个点。再次将P移到任意角的一半位置,绘制,然后重复。
你可能认为随机运动会产生随机结果,但事实并非如此。
https://stackoverflow.com/questions/425953
复制相似问题