Exemplo n.º 1
0
        private void Search()
        {
            int i = c;

            double[] res;
            bool     b;

            while (true)
            {
                res = Expendator.Seq(tmin, tmax, i);
                b   = false;
                for (int k = 0; k < mas.Length; k++)
                {
                    if (res.Contains(mas[k]))
                    {
                        b = true;
                        break;
                    }
                }
                if (!b)
                {
                    if (res.Where((double n) => n >= dtmin && n <= dtmax).Count() >= count)
                    {
                        label8.Text = $"Число точек: {i}; шаг: {res[1] - res[0]}";
                        tcount      = i;
                        return;
                    }
                }

                i++;
            }
        }
        private static int GetTrack(int min, int max, int count, double val)
        {
            val = min + (max - min) * val;

            var arr = Expendator.Seq(min, max, count);

            return(Array.IndexOf(arr, Vectors.Create(arr).BinaryApproxSearch(val)));
        }
        public void Vg()
        {
            var arr = Expendator.Seq(абКонсоль.wbeg, абКонсоль.wend, 300);

            using (StreamWriter f = new StreamWriter("Vg.txt"))
            {
                foreach (var p in arr)
                {
                    f.WriteLine($"{p} {Functions.Vg(p)}");
                }
            }
        }
        public Point[] GetPointArray(int count)
        {
            double cost = Math.Cos(tau), sint = Math.Sin(tau);
            var    angles = Expendator.Seq(0, 2 * Math.PI, count, false);

            Point[] res = new Point[count];
            for (int i = 0; i < angles.Length; i++)
            {
                double sinf = Math.Sin(angles[i]), cosf = Math.Cos(angles[i]);
                res[i] = new Point(xM.x + a * cost * cosf - b * sint * sinf, xM.y + a * sint * cosf + b * cost * sinf);
            }
            return(res);
        }
        public async Task ManyPZAsync(Source[] sources, string path)
        {
            ZlimsCalculate(sources.Length, path);
            groupBox2.Hide();
            groupBox6.Hide();
            GetFields();

            Metrics(path);

            double th = (tmax - tmin) / (tcount - 1);

            all = tcount;
            timer1.Start();
            IProgress <int> progress = new Progress <int>((p) => { save = p; });

            toolStripStatusLabel1.Text = "Вычисления запущены";
            System.Threading.CancellationToken token = source.Token;

            StreamWriter ts  = new StreamWriter(Path.Combine(path, "textnames.txt"));
            StreamWriter pds = new StreamWriter(Path.Combine(path, "pdfnames.txt"));
            string       gl  = $"{Source.ToString(sources)}, (xmin, xmax, count, ymin, ymax) = ({xmin}, {xmax}, {count}dot{count2}, {ymin}, {ymax})";

            Expendator.WriteStringInFile(Path.Combine(path, "SurfaceMain.txt"), gl);

            double[] xmas = Expendator.Seq(xmin, xmax, count);
            double[] ymas = Expendator.Seq(ymin, ymax, count2);

            Func <Point, bool> Filt = (Point point) =>
            {
                for (int q = 0; q < sources.Length; q++)
                {
                    if (sources[q].Filter(point))
                    {
                        return(true);
                    }
                }
                return(false);
            };
            const string filename = "3D ur, uz.txt";

            async Task SlowUxtAsync()
            {
                double[,] ur = new double[count, count2], uz = new double[count, count2];
                for (int i = 0; i < tcount; i++)
                {
                    double t = tmin + i * th;
                    if (t == 0)
                    {
                        continue;
                    }

                    toolStripStatusLabel1.Text = $"Построение графика при t = {t.ToString(3)}";
                    string tit = $"{Source.ToString(sources)}, t = {t.ToString(4)}, (xmin, xmax, count, ymin, ymax) = ({xmin}, {xmax}, {count}dot{count2}, {ymin}, {ymax})";

                    ts.WriteLine(tit + ".txt");
                    pds.WriteLine($"3D ur, uz(title , {tit} ).pdf");
                    button2.Show();

                    await Task.Run(() =>
                                   МатКлассы.Waves.Circle.FieldToFile(filename, path,
                                                                      (double x, double y) => Uxt(x, y, t, sources),
                                                                      xmas, ymas, ref ur, ref uz,
                                                                      token,
                                                                      Filt,
                                                                      tit,
                                                                      true)
                                   );

                    if (source.IsCancellationRequested)
                    {
                        return;
                    }

                    if (checkBox1.Checked)
                    {
                        await Task.Run(() => StartProcess("3Duxt.r", tit, false, path));
                    }

                    filenames[i] = "3D " + tit + " .png";
                    save         = i + 1;
                    if (source.IsCancellationRequested)
                    {
                        return;
                    }
                }

                ur = null; uz = null;
            }

            async Task FastUxtAsync()
            {
                save = 0;
                string[] tsmas = new string[tcount], pdsmas = new string[tcount];
                toolStripStatusLabel1.Text = $"Построение u(x,t) с усиленным параллелизмом";
                int[] kmas = new int[tcount];

                await Task.Run(() =>
                {
                    OtherMethods.CalcUXT(xmas, ymas, sources);

                    Parallel.For(0, tcount, (int i) =>
                    {
                        double t = tmin + i *th;
                        if (t != 0)
                        {
                            string tit = $"{Source.ToString(sources)}, t = {t.ToString(4)}, (xmin, xmax, count, ymin, ymax) = ({xmin}, {xmax}, {count}, {ymin}, {ymax})";

                            tsmas[i]     = tit + ".txt";
                            pdsmas[i]    = $"3D ur, uz(title , {tit} ).pdf";
                            filenames[i] = "3D " + tit + " .png";

                            МатКлассы.Waves.Circle.FieldToFile(path, (double x, double y) => Uxt(x, y, t, sources),
                                                               xmas, ymas,
                                                               token,
                                                               Filt,
                                                               tit);

                            if (source.IsCancellationRequested)
                            {
                                return;
                            }
                        }
                        kmas[i] = 1;

                        save = kmas.Sum();
                        if (source.IsCancellationRequested)
                        {
                            return;
                        }
                    }
                                 );
                });

                tsmas  = tsmas.Where(n => n != null).ToArray();
                pdsmas = pdsmas.Where(n => n != null).ToArray();
                for (int i = 0; i < tsmas.Length; i++)
                {
                    ts.WriteLine(tsmas[i]);
                    pds.WriteLine(pdsmas[i]);
                }
            }

            WriteXY(filename, path, xmas, ymas);
            //выбор параллельного или последовательного методов
            if (даToolStripMenuItem.Checked)
            {
                await FastUxtAsync();
            }
            else
            {
                await SlowUxtAsync();
            }

            Timer1_Tick(new object(), new EventArgs());
            checkBox1.Hide();
            timer1.Stop();
            FilenamesArrayToFile(path);
            ts.Close();
            pds.Close();
            button2.Hide();

            await AnimateAsync(gl, path);
        }