Exemplo n.º 1
0
        /// <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"));
            }
        }
Exemplo n.º 2
0
        private static async Task GetDataToFileAsync(string shortname, string savename, Func <double, double, double> F, double[] x, double[] y, IProgress <int> progress, System.Threading.CancellationToken token, StringsForGrafic forGrafic, bool parallel = true)
        {
            int lenx = x.Length;
            int leny = y.Length;

            int[] k = new int[lenx * leny];
            double[,] ur = new double[lenx, leny];

            void InnerLoop(int i)
            {
                for (int j = 0; j < leny; j++)
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }
                    ur[i, j]        = F(x[i], y[j]);
                    k[i * leny + j] = 1;
                }
                progress.Report(k.Sum());
            }

            await Task.Run(() =>
            {
                //нахождение массивов
                if (parallel)
                {
                    Parallel.For(0, lenx, (int i) =>
                    {
                        InnerLoop(i);
                    });
                }
                else
                {
                    for (int i = 0; i < lenx; i++)
                    {
                        InnerLoop(i);
                    }
                }
            });


            var filenames = new string[]
            {
                $"{shortname}(args).txt",
                $"{shortname}(vals).txt",
                $"{shortname}(info).txt"
            };

            Expendator.WriteInFile("3D Grafics Data Adress.txt", filenames);

            forGrafic.WriteInFile(filenames[2], shortname, savename);

            if (lenx == leny)
            {
                using (StreamWriter xs = new StreamWriter(filenames[0]))
                {
                    xs.WriteLine("x y");
                    for (int i = 0; i < lenx; i++)
                    {
                        xs.WriteLine($"{x[i]} {y[i]}");
                    }
                }

                using (StreamWriter ts = new StreamWriter(filenames[1]))
                {
                    ts.WriteLine("vals");
                    for (int i = 0; i < lenx; i++)
                    {
                        for (int j = 0; j < lenx; j++)
                        {
                            if (Double.IsNaN(ur[i, j]))
                            {
                                ts.WriteLine("NA");
                            }
                            else
                            {
                                ts.WriteLine($"{ur[i, j]}");
                            }
                        }
                    }
                }
            }
            else
            {
                double max = 0, a = 0, b = 0;
                for (int i = 0; i < lenx; i++)
                {
                    for (int j = 0; j < leny; j++)
                    {
                        if (ur[i, j] > max)
                        {
                            max = ur[i, j];
                            a   = x[i];
                            b   = y[j];
                        }
                    }
                }
                Expendator.WriteInFile(savename + "(MaxCoordinate).txt", new string[]
                {
                    "a b",
                    $"{a.ToRString()} {b.ToRString()}".Replace(',', '.'),
                    $"maximum is {max}".Replace(',', '.'),
                    $"omega = {1.0 / (a * 1000)}"
                });
            }
        }
Exemplo n.º 3
0
 /// <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);
     }
 }
Exemplo n.º 4
0
 private static async Task GetDataToFileAsync(string shortname, Func <double, double, double> F, double xmin, NetOnDouble x, NetOnDouble y, IProgress <int> progress, System.Threading.CancellationToken token, StringsForGrafic forGrafic, bool parallel = true)
 {
     await GetDataToFileAsync(shortname, shortname, F, x.Array, y.Array, progress, token, forGrafic, parallel);
 }