0.
先看一看在c#中如何使用复数。
在项目中 添加引用程序集 System.Numerics;
using System.Numerics;
//复数 z=1+1i,注意!复数单位i并没有出现在代码中
Complex z = new Complex(1, 1);
//z的模
double r = z.Magnitude; //r=1.4142135623730951
//z的相角
double alpha = z.Phase; //alpha=0.78539816339744828(弧度)
//再定义一个复数z1=3+5i
Complex z1 = new Complex(3, 5);
//复数求和 y=z+z1;
Complex y = z+z1; //这里也没有出现 i
double imag = y.Imaginary; //y的虚部imag=6.0
double real = y.Real; //y的实部real=4.0
1.
关于曼德勃罗集合的简单介绍,及本篇文章的思路来源及 学习网址 如下:
https://blog.csdn.net/q1007729991/article/details/79510494
2.
建议看了 学习网址 的帮助内容之后再去看下面的示例代码。
我的代码结果。
3.代码如下:
Bitmap mybitmap;
int size = 1000;
//这里自定义一张纯颜色图片 1000*1000
mybitmap = new Bitmap(size, size, PixelFormat.Format24bppRgb);
Graphics.FromImage(mybitmap).Clear(Color.LightBlue);
//引用程序集 System.Numerics
double yy = 0;
double xx = 0;
Complex cc = 0;
for (int y = 0; y < size; y++) {
//图片坐标点 映射到 y(-2,2) x(-2,2) 的区域(分形区 M)
yy = ((double)y / size) * 4 - 2;
for (int x = 0; x < size; x++) {
xx = ((double)x / size) * 4 - 2;
cc = new Complex(xx,yy); //复数C
//像素设置区分颜色 根据C是不是分形数,及迭代次数
mybitmap.SetPixel(x,y,mandelBrot(cc));
}
}
//保存分形图片
mybitmap.Save(@"G:\新建文件夹\mandelbtot.png");
// z = z^2 + c z < 2
//如果迭代 400 次(代替无穷)发现 z 还是小于 2,则认为 c 属于 M
private Color mandelBrot(Complex cc) {
Complex z = 0;
const int iterator = 400;
for (int i = 0; i < iterator; i++) {
if (z.Magnitude > 2) {
return getColor(i); //不是分形点则根据迭代次数,设置颜色深度
}
z = z * z + cc;
}
//分形区的颜色 白色
return Color.White;
}
private Color getColor(int n) {
int v = n * 20;
if (v>255) {
v = 255;
}
return Color.FromArgb(v,v,v);
}
完!