注册 登录
编程论坛 C# 论坛

C#关于Mandelbrot图像的问题

weikeli19 发布于 2015-05-04 14:07, 1190 次点击
C#关于Mandelbrot图像的问题

书上说图像中的每个位置用参数N来表示,它是x*x+y*y的平方根。如果这个值大于或等于2,那么这个数字对应的位置值是0。如果参数N的值小于2,就把N的值改为N*N-N,即N=(x*x-y*y-x)+(2*x*y-y)*i),并再次测试这个新N值。如果这个值大于或等于2,则这个数字对应的位置值是1.这个过程将一直继续下去,直到给图像中的位置赋一个值,火迭代执行的次数超过指定的次数为止。

这个图像是纯文本字符的形式

我想问的是1)它里面所说的位置是什么意思?
          2)位置值只有0和1吗?位置值会有2,3,4,5......吗?
          3) 程序中 for(imagCoord=1.2;imagCoord>=-1.2 ;imagCoord-=0.05)
                                  {
                                       for(realCoord=-0.6;realCoord<=1.77;realCoord+=0.03)
                                            {
                        请问这里的数字1.2   -1.2   0.05     -0.6    1.77    0.03  这些小数代表什么  这些数字从何而来? 谢谢
这个图像是纯文本字符的形式

程序是这样的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double realCoord, imagCoord;
            double realTemp, imagTemp, realTemp2, arg;
            int iterations;
            for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05)
            {
                for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
                {
                    iterations = 0;
                    realTemp = realCoord;
                    imagTemp = imagCoord;
                    arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                    while ((arg < 4) && (iterations < 40))
                    {
                        realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)
                            - realCoord;
                        imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                        realTemp = realTemp2;
                        arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                        iterations += 1;
                    }
                    switch (iterations % 4)
                    {
                        case 0: Console.Write("."); break;
                        case 1: Console.Write("o"); break;
                        case 2: Console.Write("O"); break;
                        case 3: Console.Write("@"); break;
                    }
                }
                Console.Write("\n");
            }
            Console.ReadKey();


        }
    }
}

[ 本帖最后由 weikeli19 于 2015-5-4 14:16 编辑 ]
3 回复
#2
weikeli192015-05-04 15:41
没有人才回复吗?
#3
Maick2015-05-04 16:50
看的头晕..理解你的题目都困难.怎么帮你
#4
weikeli192015-05-04 17:18
回复 3楼 Maick
你不如在你的vs上运行一下 看看效果就知道了
1