Программа моделирования движения частиц, образующих кольца Сатурна,
в среде программирования Турбо Паскаль 5.5.

Частицы движутся под действием сил тяготения, пропорциональных A, B/R/R, радиальной и тангенциальной составляющих вихревых сил Cr/R, Ct/R.

A, B, Cr, Ct -- константы, подобранные опытным путём, R -- расстояние от частиц до центра Сатурна. Частицы имеют начальную скорость, которая в программе не отражена (подменена воображаемым вращением осей координат).

uses  Crt, Graph;

label M1,M2;

var

I                                                        : LongInt;

Gd,Gm                                              : Integer;

Xo,Yo,Rn,Rs,J,F,N,Dxi,Dyi               : Integer;

Ar,At,Z,S,Dx,Dy,R,Rp                       : Real;

T,A,B,Ct,Cr,Eps                                : Real;

Massa,Alfa,Betta,Gamma,U,Ux,Uy     : Real;

                                                         

Procedure P;   {Вычисление текущих координат и рисование траектории}

begin

R:=Sqrt(Z*Z+S*S);                { Расстояние частицы от центра Сатурна }      

if S=0 then S:=0.00001;                               { Защита от деления на ноль }     

Alfa:=ArcTan(Z/S);                               { Угол наклона радиуса-вектора }      

At:=Ct/R/Massa;                                         { Ускорение тангенциальное }     

Ar:=(A+B/R/R+Cr/R)/Massa;                { Сумма радиальных ускорений }

U:=Sqrt(At*At+Ar*Ar);          { Амплитуда вектора полного ускорения }      

{ Вычисление угла наклона вектора полного ускорения }
Betta:=ArcTan(Ar/At);   Gamma:=Alfa-Betta;

Ux:=U*Sin(Gamma); Uy:=U*Cos(Gamma);  {Выч. текущих координат} 

  { Пересчёт координат для устранения системной ошибки } 

if Dx>Xo then begin Dx:=Dx+(Ux*T); Dy:=Dy-(Uy*T) end

               else begin Dx:=Dx-(Ux*T); Dy:=Dy+(Uy*T) end;

Dxi:=Round(Dx); Dyi:=Round(Dy);                                      { Округление }

LineTo(Dxi,Dyi);                                                 

end;                                                                           { Конец процедуры P }

 

Procedure P1; { Рисование траектории движения частиц }

begin

J:=1; R:=5; 

   repeat

Z:=Yo-Dy;  S:=Xo-Dx;              { Расстояние от частицы до осей Х и У }

Rp:=R;                                                                 { Запоминание радиуса }

P;                                                             { Использование процедуры P }

for I:=1 to 10000000 do;            { Пустой цикл для замедления процесса }

J:=J+1;

    until Abs(R-Rp)<Eps;

end;                                                                       { Конец процедуры P1}


Procedure P2;             {Продолжение  траектории  с рисованием частиц}

begin  

J:=1;

repeat

Z:=Yo-Dy;  S:=Xo-Dx;              { Расстояние от частицы до осей Х и У }

P;                                                            { Использование процедуры P }

Pieslice(Dxi,Dyi,0,360,2);                                         { Рисование частицы }

for I:=1 to 1000000 do;             { Пустой цикл для замедления процесса }

J:=J+1;

    until J>N;

end;   {Конец процедуры P2}

                          {ШШШШШШШШШШШШШШШШШШШШШШШШШ}

                                                                     {Программа рисования колец}

begin

 { Включение графического режима }

Gd := Detect; InitGraph(Gd, Gm, 'B:\Tp55\BGI');

if GraphResult <> grOk then Halt(1);

{---------------------------------------------}

SetColor(15);

SetTextStyle(TriplexFont,HorizDir,1);                          {Печать заголовка}

MoveTo(0,0); OutText('Образование колец Сатурна');

Xo:=Round(GetMaxX*2/3-50); Yo:=Round(GetMaxY/2);    {Начало осей } Line(150,Yo,GetMaxX-50,Yo); Line(Xo,0,Xo,GetmaxY-30);   { Оси X и Y }

Rs:=80; Pieslice(Xo,Yo,0,360,Rs);                           { Рисование Сатурна }

T:=0.005;  Eps:=0.03;{Шаг счёта времени и точность выхода на орбиту}

A:=0.5; B:=150; Ct:=2000; Cr:=10;                                           {Константы}

                    {ШШШШШШШШШШШШШШШШШШШШШШШШШ}

                                           { Рисование первого кольца }

OutTextXY(0,GetMaxY-50,'Захват частицы массой 0,004 ');

Massa:=0.004; N:=70;                    { Масса и количество частиц в кольце}

Rn:=150; R:=Rs+Rn;      { Расстояние частицы от Сатурна и его центра }

F:=1;                                                                            { Установка флага }

     M1:

Dx:=Xo;  Dy:=Yo-R;                           { Начальные координаты частицы }

Dxi:=Round(Dx); Dyi:=Round(Dy);                     { Округление координат }

SetColor(14);                                                       { Цвет рисования }  

MoveTo(Dxi,Dyi); Pieslice(Dxi,Dyi,0,360,2);              { Начало траектории }

P1;  P2;                                                            { Процедуры рисования }

if F=2 then Goto M2;                                                      { Проверка флага }

                       {ШШШШШШШШШШШШШШШШШШШШШШШШШ}

                                         { Рисование второго кольца }

SetColor(15);

OutTextXY(0,GetMaxY-25,'Частица массой 0,008 отрывается от Сатурна');

Massa:=0.008; N:=80;                   { Масса и количество частиц в кольце} 

Rn:=2; R:=Rs+Rn;      { Расстояние от частицы до Сатурна и его центра }

F:=2;                                                                        { Перестановка флага }

Goto M1;

M2:

SetColor(15);

OutTextXY(GetMaxX-100,GetMaxY-25,'Готово');

Readln; CloseGraph;

end.

Счётчик

Hosted by uCoz