C#:曼德勃罗分形图 MandelBrot集合 的分析及绘制

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

完!

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值