public static void Run_Standard(double minR, double maxR, double stepR, double minI, double maxI, double stepI, ulong maximumRecursionDepth, ulong bufferSize, bool visualise) { Console.WriteLine("Starting calculation..."); Calculation.GenerateValues( minR, maxR, stepR, minI, maxI, stepI, maximumRecursionDepth, dataFileName, bufferSize); Console.WriteLine("Calculation complete"); if (visualise) { Console.WriteLine("Visualising..."); Visualising.CallVisualisationProgram(dataFileName); } }
/// <param name="bufferSize">Maximum number of values to store before saving to file</param> public static void GenerateValues( double minR, double maxR, double stepR, double minI, double maxI, double stepI, ulong maximumRecursionDepth, string outputFileName, ulong bufferSize = ulong.MaxValue) { ulong rowLength = 0; for (double r = minR; r <= maxR; r += stepR) { rowLength++; } Visualising.ResetFile(outputFileName, rowLength); for (double i = minI; i <= maxI; i += stepI) { List <ulong> current = new List <ulong>(); for (double r = minR; r <= maxR; r += stepR) { current.Add(GenerateValue( new ComplexNumber(r, i), maximumRecursionDepth )); if ((ulong)current.Count >= bufferSize) { SaveValuesToFile(current.Select(x => (float)x / maximumRecursionDepth).ToArray(), outputFileName); current.Clear(); } } if (current.Count > 0) { SaveValuesToFile(current.Select(x => (float)x / maximumRecursionDepth).ToArray(), outputFileName); current.Clear(); } } }
private static void SaveValuesToFile(float[] values, string outputFileName) { Visualising.WritePartialData(values, outputFileName); }