TED系列之《艺术》

TED系列之《艺术》

5 (13人评价)
  • 课时:(68)

  • 学员:(290)

  • 浏览:(16746)

  • 加入课程

碎形与粗糙度的艺术的笔记

相关课时: 笔记详情:

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());   }   }

0 0

你感兴趣的课程

2万+浏览/ 59学员/ 3.5评分
免费
2万+浏览/ 162学员/ 4.8评分
免费
2万+浏览/ 231学员/ 4.5评分
免费