using System; using System.Drawing; using System.Drawing.Imaging; using System.Xml.Serialization; using System.IO; using System.Windows.Forms; using System.Threading; namespace Fractals { public class Mandelbrot : FractalSet { public Mandelbrot( ) { } protected override Color GetColorVal( double RealC, double ImaginaryC ) { double RealZ = 0; double ImaginaryZ = 0; double RealZ2 = 0; double ImaginaryZ2 = 0; int ColorIndex = 0; while( (ColorIndex < _MaxIter) && (RealZ2 + ImaginaryZ2 < _MaxMagSquared) ) { RealZ2 = RealZ * RealZ; ImaginaryZ2 = ImaginaryZ * ImaginaryZ; ImaginaryZ = 2 * ImaginaryZ * RealZ + ImaginaryC; RealZ = RealZ2 - ImaginaryZ2 + RealC; ColorIndex++; } return( Color.FromArgb(_Color[ColorIndex % _MaxColors]) ); } public void ReadSettings( string pathname ) { MandelbrotSettings settings; try { XmlSerializer serializer = new XmlSerializer( typeof(MandelbrotSettings) ); TextReader reader = new StreamReader( pathname ); settings = (MandelbrotSettings)serializer.Deserialize( reader ); reader.Close(); } catch { settings = new MandelbrotSettings(); } _MaxIter = settings.Iterations; _realCenter = settings.RealCenter; _imgCenter = settings.ImgCenter; _deltaReal = settings.Scale; _deltaImg = _deltaReal; _Color = settings.ColorMap; } public void SaveSettings( string pathname ) { MandelbrotSettings settings = new MandelbrotSettings(); settings.Iterations = _MaxIter; settings.RealCenter = _realCenter; settings.ImgCenter = _imgCenter; settings.Scale = _deltaReal; settings.ColorMap = _Color; XmlSerializer serializer = new XmlSerializer( typeof(MandelbrotSettings) ); TextWriter writer = new StreamWriter( pathname ); serializer.Serialize( writer, settings ); writer.Close(); } } }