zoukankan      html  css  js  c++  java
  • Most beautiful Mathematics formula:Mandelbrot Set

     1     public unsafe class MandelbrotSet
     2     {
     3         public Bitmap bmp = null;
     4         public BitmapData bd = null;
     5         public int[] data = null;
     6         public Point[] pts = null;
     7 
     8         public int width;  //pexils
     9         public int height;
    10         public double scall = 3;
    11         public int initLevel;
    12 
    13         public double startx, starty, endx, endy;
    14 
    15         public MandelbrotSet(int width, int height, double scall, int initLevel)
    16         {
    17             this.width = width;
    18             this.height = height;
    19             this.scall = scall;
    20 
    21             this.startx = -1 * (scall / 2)*((double)width/height);
    22             this.endx = (scall / 2) * ((double)width / height);
    23 
    24             this.starty = (scall/2);
    25             this.endy = -1*(scall/2);
    26 
    27             this.initLevel = initLevel;
    28             pts = new Point[width * height];
    29             data = new int[width * height];
    30 
    31             for (int y = 0; y < height; y++)
    32             {
    33                 for (int x = 0; x < width; x++)
    34                 {
    35                     pts[x + y * width] = new Point(x, y);
    36                 }
    37             }
    38 
    39             this.bmp = new Bitmap(width, height);
    40             using (var g = Graphics.FromImage(bmp))
    41             {
    42                 g.Clear(Color.Black);
    43                 g.DrawString("123", new Font("Lucida Console", 12), new SolidBrush(Color.Red), new PointF(0, 0));
    44             }
    45             
    46         }
    47 
    48         public void Calculate()
    49         {
    50             bd = bmp.LockBits(new Rectangle(Point.Empty, bmp.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
    51 
    52             double unitx = (double)1/width;
    53             double unity = (double) 1/height;
    54             pts.AsParallel().ForAll(pt =>
    55                 {
    56                     Complex c = new Complex(pt.X * unitx * (endx - startx) + startx, (double)pt.Y *unity * (endy - starty) + starty);
    57                     Complex z = 0;
    58 
    59 
    60 
    61                     int count = 0;
    62                     do
    63                     {
    64                         z = z * z + c;
    65                         count++;
    66                     }
    67                     while (z.Magnitude < 4 && count < initLevel);
    68                     //return count;
    69 
    70                     double _value;
    71                     if (count == 0)
    72                         _value = 0;
    73                     else
    74                         _value = Math.Log(count) / Math.Log(initLevel);
    75 
    76                     Color cl = Color.FromArgb(0xFF, (int)(Math.Sin(_value * Math.PI) * 0xFF), (int)(Math.Sin(_value * Math.PI) * 0xFF), 0);
    77                     UnsafeSetPixel(pt.X, pt.Y, cl.R, cl.G, cl.B);
    78 
    79                 });
    80             bmp.UnlockBits(bd);
    81         }
    82                 
    83 
    84         public void UnsafeSetPixel(int x, int y, byte r, byte g, byte b)
    85         {
    86             byte* row = (byte*)bd.Scan0 + (y * bd.Stride);
    87             row[x * 4] = b; //Blue  0-255
    88             row[x * 4 + 1] = g; //Green 0-255
    89             row[x * 4 + 2] = r; //Red   0-255
    90             //row[x * 4 + 3] = 100; //Alpha 0-255
    91         }
    92     }

    Download:SourceCode

  • 相关阅读:
    ASP.NET中如何防范SQL注入式攻击?(转)
    打开D盘时速度奇慢?
    Visual Studio 2008 下载地址
    如何利用XML文件,做为配置参数?
    如何将一个表中的数据INSERT INTO 到另一个表中?
    拖延交货或惹万人诉讼 消费者称戴尔态度恶劣
    NHibernate Linq中Null值排序的解决方法
    NHibernate3剖析:Query篇之NHibernate.Linq标准查询
    Nhibernate出现No row with the given identifier exists问题的产生原因及解决方法
    Nhibernate使用动态Expression的问题解决
  • 原文地址:https://www.cnblogs.com/netact/p/3017530.html
Copyright © 2011-2022 走看看