首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对分形进行编程?

如何对分形进行编程?
EN

Stack Overflow用户
提问于 2009-01-08 21:07:22
回答 9查看 113.7K关注 0票数 78

我没有任何编程分形的经验。我当然看过著名的曼德尔布洛特的照片之类的。

你能为我提供简单的分形算法吗?

编程语言并不重要,但我最熟悉的是actionscript,C#,Java。

我知道,如果我在谷歌上搜索分形,我会得到很多(复杂的)信息,但我想从一个简单的算法开始,并尝试它。

改进基本算法的建议也是受欢迎的,比如如何让它们变成那些可爱的颜色等等。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 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)矩形区域转换为屏幕坐标。

票数 61
EN

Stack Overflow用户

发布于 2009-01-08 21:29:00

有一本名为Chaos and Fractals的好书,在每一章的末尾都有简单的示例代码,实现了一些分形或其他示例。很久以前,当我读到那本书的时候,我把每个示例程序(用一些基本的方言)转换成了一个在网页上运行的Java applet。小应用程序在这里:http://hewgill.com/chaos-and-fractals/

其中一个示例是一个简单的Mandelbrot实现。

票数 8
EN

Stack Overflow用户

发布于 2009-01-08 22:12:29

另一个值得学习的优秀分形是Sierpinski三角形分形。

基本上,绘制一个三角形的三个角(等边是首选的,但任何三角形都可以),然后在其中一个角上开始一个点P。将P随机移动到3个角中的任意一个,并在那里绘制一个点。再次将P移到任意角的一半位置,绘制,然后重复。

你可能认为随机运动会产生随机结果,但事实并非如此。

参考:http://en.wikipedia.org/wiki/Sierpinski_triangle

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/425953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档