/// <summary> /// Создать 3D график в нужной форме /// </summary> /// <param name="graficType">Тип графика</param> /// <param name="shortname">Имя файла с графиками (без расширения)</param> /// <param name="path">Директория, куда будут сохраняться файлы</param> /// <param name="F">Функция, чей график надо построить</param> /// <param name="xmin">Начало отрезка по первой координате</param> /// <param name="xmax">Конец отрезка по первой координате</param> /// <param name="ymin">Начало отрезка по второй координате</param> /// <param name="ymax">Конец отрезка по второй координате</param> /// <param name="count">Число точек в разбиении отрезка. В сетке будет count*count этих точек</param> /// <param name="progress">Объект для отслеживания прогресса</param> /// <param name="token">Объект для отмены операции</param> /// <param name="title">Название поверхности</param> /// <param name="xlab">Название оси X</param> /// <param name="ylab">Название оси Y</param> /// <param name="zlab">Название оси Z</param> /// <param name="parallel">Выполнять ли вычисления параллельно</param> public static void MakeGrafic(GraficType graficType, string shortname, Func <double, double, double> F, NetOnDouble x, NetOnDouble y, IProgress <int> progress, System.Threading.CancellationToken token, StringsForGrafic forGrafic, bool parallel = true) { if (graficType == GraficType.Window) { new nzy3d_winformsDemo.Form1(forGrafic.Title, x.Begin, x.End, x.Count, y.Begin, y.End, y.Count, F).ShowDialog(); } else { JustGetGraficInFilesAsync(shortname, shortname, F, x, y, progress, token, forGrafic, graficType, parallel).GetAwaiter().GetResult(); GetForm(shortname); } }
//Перевод типа графика в строку public static string ToRussian(this GraficType t) { switch (t) { case GraficType.Grafic: return("График"); case GraficType.Grafic0: return("График0"); case GraficType.Diagramm: return("Диаграмма"); } return("Ошибка"); }
private static void GraficTypeToFile(GraficType type) { string s = ""; switch (type) { case GraficType.Html: s = "html"; break; case GraficType.Pdf: s = "pdf"; break; case GraficType.Png: s = "png"; break; default: s = "all"; break; } Expendator.WriteStringInFile("GraficType.txt", s); }
public Grafic(string code, int dim, GraficType graficType) { Code = code; Dim = dim; GraficType = graficType; }
/// <summary> /// Только создать 3D графики с сохранением в файлы /// </summary> /// <param name="shortname"></param> /// <param name="F"></param> /// <param name="xmin"></param> /// <param name="xmax"></param> /// <param name="ymin"></param> /// <param name="ymax"></param> /// <param name="count"></param> /// <param name="progress"></param> /// <param name="token"></param> /// <param name="graficType"></param> /// <param name="title"></param> /// <param name="xlab"></param> /// <param name="ylab"></param> /// <param name="zlab"></param> /// <param name="parallel"></param> public static async Task JustGetGraficInFilesAsync(string shortname, string savename, Func <double, double, double> F, NetOnDouble x, NetOnDouble y, IProgress <int> progress, System.Threading.CancellationToken token, StringsForGrafic forGrafic, GraficType graficType = GraficType.PdfPngHtml, bool parallel = true) { await GetDataToFileAsync(shortname, savename, F, x.Array, y.Array, progress, token, forGrafic, parallel); GraficTypeToFile(graficType); RemoveOlds(shortname); if (x.Count == y.Count) { await Task.Run(() => Expendator.StartProcessOnly("Magic3Dscript.R")); } }
//Рекурсивно вызываемая процедура расчета значения по координатам public double Calculate(double[] x, GraficType type) { if (Dimension == 1) { return(Points[0].Mean); } if (type != GraficType.Diagramm) { if (x[Dimension - 1] < Points[0].Mean) { return(Points[0].Calculate(x, type)); } if (x[Dimension - 1] > Points[Points.Count - 1].Mean) { return(Points[Points.Count - 1].Calculate(x, type)); } } int beg = 0; int en = Points.Count - 1; while (en - beg > 1) { int c = (en + beg) / 2; if (x[Dimension - 1] < Points[c].Mean) { en = c; } else { beg = c; } } double y1; switch (type) { case GraficType.Grafic0: y1 = Points[beg].Calculate(x, type); return(y1); case GraficType.Grafic: y1 = Points[beg].Calculate(x, type); double y2 = Points[en].Calculate(x, type); double x1 = Points[beg].Mean; double x2 = Points[en].Mean; if (x2 == x1) { return(double.NaN); } return(y1 + ((y2 - y1) / (x2 - x1)) * (x[Dimension - 1] - x1)); case GraficType.Diagramm: if (Points[beg].Mean == x[Dimension - 1]) { y1 = Points[beg].Calculate(x, type); return(y1); } if (Points[en].Mean == x[Dimension - 1]) { y1 = Points[en].Calculate(x, type); return(y1); } return(double.NaN); } return(double.NaN); }