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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2010, 01:10   #1
WRX
Новичок
Джуниор
 
Регистрация: 26.10.2009
Сообщений: 3
По умолчанию Проблема двух тел

Доброго времени суток.
При моделировании задачи дух тел ничего не происходит - отображается только Figure1.
Figure2 движется только в том случае, если уравнение движения представить ввиде:
x=x2+vx*t+(ax*(t*t)/2); //новые координаты Фигуры2
y=y2+vy*t+(ay*(t*t)/2);
Движение прямолинейно и равноускоренно (как будто воздействие Figure1 нет).
Код:
#include <graphics.h>
#include <math.h>

void Figure2 (int x0, int y0, int color)
{
     const int R=3;
     setcolor (color);
     circle (x0,y0,R);
}

void Figure1 (int x1, int y1, int color)
{
     const int R=30;
     setcolor (color);
     circle (x1,y1,R);
}

main() 
{ 
   float x1=400,y1=400, x2=300, y2=450; 
   float dt = 0.001,t,ax,ay,Fx,Fy,r,rx,ry,m=1,M=10000,G=1,v0x=5,v0y=2;
   // m - масса Фигуры2, М - масса Фигуры1, ПG - гравитационная постоянная,
   //v0x,(v0y) - проекция скорости Фигуры2 на ось X,(Y)
   float vx,vy;
   float dtOut = 0.1, tOut = 0; 
   int x,y;
   initwindow ( 800, 800 );  // открыть окно для графики
   Figure1 (400, 400, RED);
   //Figure2 (700,500,RED); // проверка
   vx=v0x, vy=v0y, t=0;
   tOut = 0; //x0 = 700; y0=500;
   
   while ( 1 )
   { 
      if ( t > tOut ) {
           tOut += dtOut;
           Figure2 (x,y,RED);
           delay ( 2 );
           //Figure2 (x,y,BLACK);
           } 
      rx=x2-x1;  //x0,y0 и x1,y1 - координаты Фигуры2 и Фигуры1 соответственно
      ry=y2-y1;
      r=sqrt(rx*rx+ry*ry); //r - расстояние м/у телами
      Fx=G*(m*M)/(r*r); 
      Fy=G*(m*M)/(r*r); //Fx,y - сила по осям
      ax=Fx/m;          // ax,ay - ускорение по осям
      ay=Fy/m;
      vx=ax*dt;         // vx,vy - скорость
      vy=ay*dt;
      x+=x2+vx*dt+(ax*(dt*dt)/2);      //новые координаты Фигуры2
      y+=y2+vy*dt+(ay*(dt*dt)/2);
      t+=dt;
   }  
   closegraph(); 
}
WRX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с InputBox в двух модулях. GoreProgrammist Microsoft Office Excel 5 26.07.2009 14:19
Пересечение платоновых тел Andrey_k Помощь студентам 0 28.04.2009 18:38
Проблема: ася работает только на одном из двух компов (через роутер) Sazary Свободное общение 4 13.03.2009 15:04
Столкновение тел Лубышев Помощь студентам 3 08.12.2008 11:07
Как пометить в форме номера тел. так что бы..... beliy-dis Microsoft Office Access 3 08.07.2008 23:11