Mandelbrot公式
“Mandelbrot图像中的每个位置都对应于公式N=x+y*i中的一个复数。其实数部分是x,虚数部分是y,i是-1的平方根。图像中各个位置的x和y坐标对应于虚数的x和y部分。 图像中的每个位置用参数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。这个过程一直继续下去,直到我们给图像中的位置赋一个值,或迭代执行的次数多于指定的次数为止。”
l利用C#控制台程序编写代码如下: static void Main(string[] args) { double realCoord, imagCoord; double realMax = 1.77; double realMin = -0.6; double imagMax = -1.2; double imagMin = 1.2; double realStep; double imagStep; double realTemp, imagTemp, realTemp2, arg; int iterations; while (true) { realStep = (realMax - realMin) / 79; imagStep = (imagMax - imagMin) / 48; for (imagCoord = imagMin; imagCoord >= imagMax; imagCoord += imagStep) { for (realCoord = realMin; realCoord <= realMax; realCoord += realStep) { 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.WriteLine("Current limits:"); Console.WriteLine("realCoord: from {0} to {1}", realMin, realMax); Console.WriteLine("imagCoord: from {0} to {1}", imagMin, imagMax); Console.WriteLine("Enter new limits:"); Console.WriteLine("realCoord: from:"); realMin = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("realCoord: to:"); realMax = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("imagCoord: from:"); imagMin = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("imagCoord: to:"); imagMax = Convert.ToDouble(Console.ReadLine()); } }
学员评论
chrishemi2013-10-04
你感兴趣的课程