Exemple #1
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);
     }
 }
Exemple #2
0
        //Перевод типа графика в строку
        public static string ToRussian(this GraficType t)
        {
            switch (t)
            {
            case GraficType.Grafic:
                return("График");

            case GraficType.Grafic0:
                return("График0");

            case GraficType.Diagramm:
                return("Диаграмма");
            }
            return("Ошибка");
        }
Exemple #3
0
        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);
        }
Exemple #4
0
 public Grafic(string code, int dim, GraficType graficType)
 {
     Code       = code;
     Dim        = dim;
     GraficType = graficType;
 }
Exemple #5
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"));
            }
        }
Exemple #6
0
        //Рекурсивно вызываемая процедура расчета значения по координатам
        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);
        }