Информатика 10-11. Книга 2. Практика алгоритмизации и программирования. Шауцукова Л.З. - 108 стр.

UptoLike

Составители: 

изображается цветом фона, отчего он становится невидимым, далее рисунок
выводится в исходном цвете, но с некоторым перемещением и т.д.
Оба способа имеют одинаковый недостаток
движение изображения является прерывистым и вызывает мелькание экрана.
В этой программе для организации более плавного движения изображения по экрану
используется возможность формировать изображение на разных страницах
видеопамяти (обычно их две или четыре, в зависимости от типа графического адаптера).
Изображение сначала создается на странице с нулевым номером, видимой по умолчанию,
а на невидимой странице с номером 1 формируется изображение с небольшим
перемещением. Затем страница с номером 1 делается видимой, а новое изображение
формируется на ставшей невидимой странице с нулевым номером и т.д.
Внимание: будет работать только если Turbo Pascal установлен в каталог
C:\TP и каталог C:\TP\BGI содержит необходимый файл egavga.bgi.
Program Space; {составил студент Тетуев Р., мат.фак. КБГУ}
Uses Graph, Crt;
Const
RadOrb = 250 {радиус орбиты Земли}; RadSun = 70 {радиус Солнца};
RadGal = 100 {радиус галактики }; RadZem = 18 {радиус Земли };
Naklon = 0.2 {коэффициент наклона плоскости орбиты Земли};
PressZem = 0.65 {коэффициент сплющенности полюсов Земли};
Compress = 0.8 {коэффициент сжатия при переходе из };
{расширения режима VGA в режим CGA }
Var
ZemX, ZemY, UgMer, PixelY, DUgZem , UpDown,
XRad, Grad, UgZem, PixelX, StAngle, Ua, Ub,
ParallelY , Color, ZemPix, EndAngle,
VisualPage, GrMode, GrError, GrDriver, i : Integer;
Ugol, CompressZem, Expansion,
DUgol, Projection, PolUgol : Real;
BEGIN
{установка графического режима и проверка возможных ошибок}
GrDriver := EGA; GrMode := EGAHi;
InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
GrError := GraphResult; If GrError<>GrOk then Halt;
SetBkColor(Black);
SetFillStyle(1, Yellow); {установка стиля заполнения
и цвета Cолнцa}
Ugol := 0; DUgol := 2*Pi/180; {орбитальное угловое смещение Земли}
UgZem := 0; DUgZem := 14; {осевое угловое смещение Земли}
{------------------------------------------------------------------}
VisualPage := 1;
Repeat {цикл прерывается нажатием любой клавиши}
SetVisualPage(1- (VisualPage mod 2));
{установка номера видимой видеостраницы}
VisualPage := VisualPage+1; {листание видеостраниц}
SetActivePage(1 - (VisualPage mod 2));
{установка номера невидимой (активной) видеостраницы,}
{используемой для построения смещенного изображения }
ClearDevice; {очистка графического экрана}
{--------------------------------------------------------------}
{Рисование "расходящейся" галактики}
RandSeed:=1; {исходное значение датчика случайных чисел}
Expansion:=VisualPage/100; {cкорость расширения
галактики}
For i:= 1 to VisualPage do
begin XRad := Trunc(Expansion*RadGal*Random);
изображается цветом фона, отчего он становится невидимым, далее рисунок
выводится в исходном цвете, но с некоторым перемещением и т.д.

Оба способа имеют одинаковый недостаток —
движение изображения является прерывистым и вызывает мелькание экрана.

В этой программе для организации более плавного движения изображения по экрану
используется возможность формировать изображение на разных страницах
видеопамяти (обычно их две или четыре, в зависимости от типа графического адаптера).

Изображение сначала создается на странице с нулевым номером, видимой по умолчанию,
а на невидимой странице с номером 1 формируется изображение с небольшим
перемещением. Затем страница с номером 1 делается видимой, а новое изображение
формируется на ставшей невидимой странице с нулевым номером и т.д.


  Внимание: будет работать только если Turbo Pascal установлен в каталог
   C:\TP и каталог C:\TP\BGI содержит необходимый файл egavga.bgi.
      Program Space; {составил студент Тетуев Р., мат.фак. КБГУ}
        Uses Graph, Crt;
        Const
          RadOrb = 250 {радиус орбиты Земли}; RadSun = 70 {радиус Солнца};
          RadGal = 100 {радиус галактики }; RadZem = 18 {радиус Земли };
          Naklon = 0.2 {коэффициент наклона плоскости орбиты Земли};
          PressZem = 0.65 {коэффициент сплющенности полюсов Земли};
          Compress = 0.8 {коэффициент сжатия при переходе из };
                         {расширения режима VGA в режим CGA }
        Var
          ZemX, ZemY, UgMer, PixelY, DUgZem , UpDown,
          XRad, Grad, UgZem, PixelX, StAngle, Ua, Ub,
          ParallelY , Color, ZemPix, EndAngle,
          VisualPage, GrMode, GrError, GrDriver, i : Integer;
          Ugol, CompressZem, Expansion,
          DUgol, Projection, PolUgol : Real;
      BEGIN
        {установка графического режима и проверка возможных ошибок}
        GrDriver := EGA; GrMode := EGAHi;
        InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
        GrError := GraphResult; If GrError<>GrOk then Halt;
        SetBkColor(Black);
        SetFillStyle(1, Yellow); {установка стиля заполнения и цвета Cолнцa}
        Ugol := 0; DUgol := 2*Pi/180; {орбитальное угловое смещение Земли}
        UgZem := 0; DUgZem := 14; {осевое угловое смещение Земли}
        {------------------------------------------------------------------}
        VisualPage := 1;
        Repeat {цикл прерывается нажатием любой клавиши}
          SetVisualPage(1- (VisualPage mod 2));
               {установка номера видимой видеостраницы}
          VisualPage := VisualPage+1; {листание видеостраниц}
          SetActivePage(1 - (VisualPage mod 2));
               {установка номера невидимой (активной) видеостраницы,}
               {используемой для построения смещенного изображения }
          ClearDevice; {очистка графического экрана}
           {--------------------------------------------------------------}
          {Рисование "расходящейся" галактики}
          RandSeed:=1; {исходное значение датчика случайных чисел}
          Expansion:=VisualPage/100; {cкорость расширения галактики}
          For i:= 1 to VisualPage do
            begin XRad := Trunc(Expansion*RadGal*Random);