Анимация отрисовки графика строфоиды ZedGraph

212
30 июля 2018, 20:40

Требуется разработать приложение, которое: 1.выводит график функции на экран; 2.анимирует построение строфоиды.

C первым заданием справился вроде

  private void построитьToolStripMenuItem_Click(object sender, EventArgs e)
            {
                GraphPane pane = graph.GraphPane;
                pane.XAxis.Title.Text = "Ось X";
                pane.YAxis.Title.Text = "Ось Y";
                pane.Title.Text = "График строфоиды";
                // Создадим список точек
                PointPairList list = new PointPairList();
                const double a = Math.PI / 2.0;
                // Заполняем список точек
                for (double x = -0.9; x <= 0.9; x += 0.01)
                {
                    double u = Math.Tan(x);
                    // добавим в список точку
                    list.Add(a * (u * u - 1) / (u * u + 1), a * u * (u * u - 1) / (u * u + 1));
                }
                // Создадим кривую с названием "Sinc", 
                // которая будет рисоваться голубым цветом (Color.Blue),
                // Опорные точки выделяться не будут (SymbolType.None)
                LineItem myCurve = pane.AddCurve("", list, Color.Green, SymbolType.None);
                // Вызываем метод AxisChange (), чтобы обновить данные об осях. 
                // В противном случае на рисунке будет показана только часть графика, 
                // которая умещается в интервалы по осям, установленные по умолчанию
                graph.AxisChange();
                // Обновляем график
                graph.Invalidate();
            }

График строит по нажатию, все в порядке Нужно настроить другую кнопку, чтобы была анимация построения Вот моя жалкая попытка Пытался методом DrawLine находить две точки и отрисовывать их а затем по таймеру переходить на следующие Куча ошибок в блоке с анимацией, подскажите

private void анимироватьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            GraphPane pane = graph.GraphPane;
            pane.XAxis.Title.Text = "Ось X";
            pane.YAxis.Title.Text = "Ось Y";
            pane.Title.Text = "График строфоиды";

            Pen p = new Pen(Color.Blue, 5);
            const double a = Math.PI / 2.0;
            // Заполняем список точек
            double x = -0.9; y, x0, y0;
            x0 = -0.9;
            y0 = 0;
            do
            {
                double u = Math.Tan(x);
                x = a * (u * u - 1) / (u * u + 1);
                y = a * u * (u * u - 1) / (u * u + 1);
                x += 0.01;
                pane.DrawLine(p, x0, y0, x, y);
                x0 = x;
                y0 = y;
                Sleep (0.001);
            } while (x <= 0.9);
            // Вызываем метод AxisChange (), чтобы обновить данные об осях. 
            // В противном случае на рисунке будет показана только часть графика, 
            // которая умещается в интервалы по осям, установленные по умолчанию
            graph.AxisChange();
            // Обновляем график
            graph.Invalidate();
        }
Answer 1
private void анимироватьToolStripMenuItem1_Click_1(object sender, EventArgs e)
        {
            GraphPane pane = graph.GraphPane;
            pane.XAxis.Title.Text = ""; pane.YAxis.Title.Text = "";
            pane.Title.Text = "Анимация графика строфоиды";
            pane.CurveList.Clear();
            // Создадим список точек
            PointPairList list = new PointPairList();
            const double a = Math.PI / 2.0;
            // Заполняем список точек
            for (double i = -0.9; i <= 0.9; i += 0.01)
            {
                double u = Math.Tan(i);
                list.Add(a * (u * u - 1) / (u * u + 1), a * u * (u * u - 1) / (u * u + 1));
                LineItem myCurve = pane.AddCurve("", list, Color.Red, SymbolType.None); // ВОТ ЗДЕСЬ СТАНДАРТНО ЗАПОЛНЯЮ ЛИСТ С ТОЧКАМИ И ВЫВОЖУ КРИВУЮ
                myCurve.Line.IsSmooth = true; // сглаживание
                Thread.Sleep(5); // ЗДЕСЬ ЗАДЕРЖКА ДЛЯ ПОСТЕПЕННОГО ПОЯВЛЕНИЯ ТОЧЕК
                graph.Refresh(); // ВНИМАНИЕ ВАЖНО! МЕТОД  graph.Invalidate(); НЕ ПРОКАТИТ, НУЖНО ИМЕННО РЕФРЕШ
            }
            graph.AxisChange();
            graph.Invalidate();
        }
READ ALSO
Имена переменных и проверка типов во время Runtime

Имена переменных и проверка типов во время Runtime

Товарищи, возникли некоторые вопросы по поводу runtime, связанные с именами переменных и проверкой их типов, однако для лучшего понимания распишу...

228
WPF Постепенная подгрузка в datagrid из БД

WPF Постепенная подгрузка в datagrid из БД

Добрый день у меня есть контекст Library, таблица BooksС помощью метода Load() я загружаю в Local данные и потом local привязываю к datagrid

206
C# WPF XAML как прописать путь к папке приложения?

C# WPF XAML как прописать путь к папке приложения?

Как в XAML прописать путь к картинке через EnvironmentCurrentDirectory

207
Выводить escape символы в file_get_contents

Выводить escape символы в file_get_contents

Есть файл, и его содержимое примерно такое:

202