mandelbrot圖像

mandelbrot圖像

mandelbrot圖像,“Mandelbrot圖像中的每個位置都對應於公式N=x+y*i中的一個複數。

基本介紹

  • 中文名:曼德勃羅圖像
  • 外文名:Mandelbrot Picture
  • 類別:圖像
  • 有關:數學、計算機圖形學
  • x和y坐標:虛數的實部和虛部
簡介,編寫代碼,

簡介

“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。這個過程一直繼續下去,直到我們給圖像中的位置賦一個值,或疊代執行的次數多於指定的次數為止。”

編寫代碼

利用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());
}
}
二:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Mandelbrot
{
class Program
{
static void Main(string[] args)
{
double realCoord, imagCoord, realTemp, imagTemp, realTemp2,arg;
int interation;
for (imagCoord=1.2; imagCoord>=-1.2;imagCoord-=0.05)
{
for (realCoord=-0.6; realCoord<=1.77;realCoord+=0.03)
{
interation = 0;
realTemp = realCoord;
imagTemp = imagCoord;
arg = (realCoord * realCoord) + (imagCoord * imagCoord);
while ((arg<4)&&(interation<40))
{
realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
imagTemp = (2 * realTemp * imagTemp) - imagCoord;
realTemp = realTemp2;
arg = (realTemp * realTemp) + (imagTemp * imagTemp);
interation += 1;
}
switch (interation%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();
}
}
}
利用VS2017編寫C++代碼如下:
#include<iostream>
int main() {
double realCoord, imagCoord, realTemp, imagTemp, realTemp2, arg;
int interation;
char outPut[4]{ '.','o','O','@' };
for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05) {
for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03) {
interation = 0;
realTemp = realCoord;
imagTemp = imagCoord;
arg = realCoord * realCoord + imagCoord * imagCoord;
while (arg < 4 && interation < 40)
{
realTemp2 = realTemp * realTemp - imagTemp * imagTemp - realCoord;
imagTemp = 2 * realTemp * imagTemp - imagCoord;
realTemp = realTemp2;
arg = realTemp * realTemp + imagTemp * imagTemp;
interation++;
}
std::cout << outPut[interation % 4];
}
std::cout << std::endl;
}
system("pause");
return 0;
}

相關詞條

熱門詞條

聯絡我們