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 Julia : FractalSet { double _realC; double _imgC; public Julia( ) { } protected override Color GetColorVal( double RealZ, double ImaZ ) { Color color; double ReaZ2 = RealZ * RealZ; double ImaZ2 = ImaZ * ImaZ; int clr = 0; while( clr < _MaxIter && (ReaZ2 + ImaZ2 < _MaxMagSquared) ) { ReaZ2 = RealZ * RealZ; ImaZ2 = ImaZ * ImaZ; ImaZ = 2 * ImaZ * RealZ + _imgC; RealZ = ReaZ2 - ImaZ2 + _realC; clr++; } if( clr >= _MaxIter ) { color = Color.FromArgb(_Color[(int)((ReaZ2 + ImaZ2) * (_MaxColors - 1)) % _MaxColors]); } else { color = Color.FromArgb(_Color[0]); } return( color ); } public void ReadSettings( string pathname ) { JuliaSettings settings; try { XmlSerializer serializer = new XmlSerializer( typeof(JuliaSettings) ); TextReader reader = new StreamReader( pathname ); settings = (JuliaSettings)serializer.Deserialize( reader ); reader.Close(); } catch { settings = new JuliaSettings(); } _realC = settings.RealC; _imgC = settings.ImgC; _MaxIter = settings.Iterations; _realCenter = settings.RealCenter; _imgCenter = settings.ImgCenter; _deltaReal = settings.Scale; _deltaImg = _deltaReal; _Color = settings.ColorMap; } public void SaveSettings( string pathname ) { JuliaSettings settings = new JuliaSettings(); settings.RealC = _realC; settings.ImgC = _imgC; settings.Iterations = _MaxIter; settings.RealCenter = _realCenter; settings.ImgCenter = _imgCenter; settings.Scale = _deltaReal; settings.ColorMap = _Color; XmlSerializer serializer = new XmlSerializer( typeof(JuliaSettings) ); TextWriter writer = new StreamWriter( pathname ); serializer.Serialize( writer, settings ); writer.Close(); } public double RealC { get { return( _realC ); } set { _realC = value; } } public double ImgC { get { return( _imgC ); } set { _imgC = value; } } } }