Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2015, 18:21   #1
Quater
 
Регистрация: 19.11.2015
Сообщений: 6
По умолчанию Visual Studio C#. Chart. Динамический график движения точки по окружности.

Доброго времени суток, уважаемые господа. Не могли бы вы помочь в решение такой задачи: мне нужно смоделировать графически движение планеты в гравитационном поле, и если с построением траектории, интегрированием уравнений Ньютона, я справился, то вы не подскажите, как сделать так, чтобы точка двигалась по этой траектории?
Грубо говоря, мне нужен не просто эллипс, а эллипс, по которому движется точка(планета), а я сделал только эллипс.

Буду очень благодарен за помощь.
Quater вне форума Ответить с цитированием
Старый 03.12.2015, 17:46   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Именно в чарте? Попробуйте чистить (Clear) и добавлять (AddPoint, емнип ) по таймеру одну точку (в серии чарта можно настроить на нужный вид в виде минипланетки) с пересчётом её координат (в зависимости от прошедшего времени)для анимации движения.
Либо тоже самое, но без чарта, а просто и эллипс и точку (точку с тем же таймером и пересчетом ессно) рисовать с помощью Graphics формы или панели, примеры можно нагуглить.

Если что не получается, кидайте сюда весь проект архивом и поточнее распишите, что требуется, попробуем помочь.
phomm вне форума Ответить с цитированием
Старый 03.12.2015, 19:25   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Quater Посмотреть сообщение
мне нужно смоделировать графически движение планеты в гравитационном поле, и если с построением траектории, интегрированием уравнений Ньютона, я справился, то вы не подскажите, как сделать так, чтобы точка двигалась по этой траектории?
Вы не могли бы скинуть построение траектории, интегрированием уравнений Ньютона. В таком виде, чтобы наглядно было использование ваших результатов.
8Observer8 вне форума Ответить с цитированием
Старый 03.12.2015, 21:17   #4
Quater
 
Регистрация: 19.11.2015
Сообщений: 6
По умолчанию

Да без проблем.

Код:
 private void button1_Click(object sender, EventArgs e)
        {
            double gamma = 10;
        
            List<double> x1 = new List<double>();
            List<double> y1 = new List<double>();
            List<double> x2 = new List<double>();
            List<double> y2 = new List<double>();
            List<double> x3 = new List<double>();
            List<double> y3 = new List<double>();
            List<double> x4 = new List<double>();
            List<double> y4 = new List<double>();
            double k, x0, y0, vx0, vy0, t, j, r, vx, vy, x, y, i, xsun1, xsun2, r0;
            double h = 0.09;
   //построение "солнца"
            for (i = -0.7 ; i <= 0.7; i = i+0.01)
            {
                y2.Add(i);
                xsun1 = Math.Sqrt((0.7 * 0.7) - (i * i));
                x2.Add(xsun1);
                y3.Add(i);
                xsun2 = -Math.Sqrt((0.7 * 0.7) - (i * i));
                x3.Add(xsun2);
            }
            Series s2 = new Series("Sun's right part");
            s2.ChartType = SeriesChartType.Spline;
            s2.Points.DataBindXY(x2, y2);
            s2.Color = Color.Green;
            chart1.Series.Add(s2);

            Series s3 = new Series("Sun's left part");
            s3.ChartType = SeriesChartType.Spline;
            s3.Points.DataBindXY(x3, y3); 
            s3.Color = Color.Green;
            chart1.Series.Add(s3);


            k = 0;
            r0 = 100;
            vx0 = 0;
            vy0 = Math.Sqrt(gamma/r0);    //начальные условия дифф.ур-ия
            t = 0;
            x0 = r0;
            y0 = 0;
            do
            {
                x1.Add(x0);
                y1.Add(y0);

                r = Math.Sqrt((x0 * x0) + (y0 * y0));

                vx = vx0 - ((h * gamma) / (r * r * r)) * x0;
                x = x0 + h * vx0;                            //числ .интегрирование
           
                vy = vy0 - ((h * gamma) / (r * r * r)) * y0;
                y = y0 + h * vy0;

                x0 = x;
                y0 = y;
                vx0 = vx;
                vy0 = vy;
                t = t + 1;
            }
            while (t<=22000);


            Series s1 = new Series("orbite");
            s1.ChartType = SeriesChartType.Spline;
            s1.Points.DataBindXY(x1, y1);    //построение орбиты
            s1.Color = Color.Blue;
            chart1.Series.Add(s1);





        }
Quater вне форума Ответить с цитированием
Старый 03.12.2015, 22:54   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Я вспомнил и нашёл "закон скоростей движения планет по орбитам". Смысл его, что когда планета проходит ближе к Солнцу, то её скорость увеличивается, а когда отдаляется, то скорость падает. Я затрудняюсь чем-то помочь.
8Observer8 вне форума Ответить с цитированием
Старый 03.12.2015, 23:20   #6
Quater
 
Регистрация: 19.11.2015
Сообщений: 6
По умолчанию

Да, это связано с тем, что орбита - эллипс, и Солнце находится в фокусе. Однако, для Земли, орбита очень близка к окружности, поэтому, думаю, в условиях моей задачи можно пренебречь этим эффектом.
Quater вне форума Ответить с цитированием
Старый 03.12.2015, 23:47   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Если считать орбиту окружностью, то платнета будет вращаться с постоянной скорость, тогда задача очень сильно упращается:

x = r * Cos(alpha)
y = r * Sin(alpha)

Если хобя бы 24 раза в секунду менять координаты объекта на небольшой градус, то он будет двигаться плавно

Последний раз редактировалось 8Observer8; 03.12.2015 в 23:55.
8Observer8 вне форума Ответить с цитированием
Старый 04.12.2015, 00:06   #8
Quater
 
Регистрация: 19.11.2015
Сообщений: 6
По умолчанию

Да, спасибо, но мой вопрос как раз таки и был в том, как сделать это движение? Сделать таймер и через какое-то количество времени строить окружность с центром в той точке орбиты, которая в данный момент посчитана циклом?
Quater вне форума Ответить с цитированием
Старый 04.12.2015, 00:42   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Нарисуйте для начала планету в виде маленькой окружности. Потом попробуйте её двигать сначала по прямой. Для этого нужно нарисовать, потом стереть, и нарисовать немного изменив координаты, опять стереть и т.д. Это да - по таймеру. Тут введение: Объекты Graphics и Drawing в Windows Forms

Вот как нарисовать круг: https://msdn.microsoft.com/ru-ru/lib...(v=vs.90).aspx

Последний раз редактировалось Stilet; 04.12.2015 в 10:22.
8Observer8 вне форума Ответить с цитированием
Старый 04.12.2015, 00:58   #10
Quater
 
Регистрация: 19.11.2015
Сообщений: 6
По умолчанию

Большое спасибо, попробую разобраться.
Quater вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в Visual Studio 2008 (C++) в windows Forms построить график по файл-данным графика? sherochka555 Visual C++ 1 03.05.2014 13:39
Visual Studio 2010 MSDN и Chart Eros Общие вопросы .NET 0 29.06.2010 21:56
Вращение точки по окружности BloodMaX Помощь студентам 4 21.12.2009 17:37
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Движение точки по окружности somwan Общие вопросы C/C++ 4 17.03.2009 16:30