Паскаль!!! Нужно написать модель солнечной системы с 3 планетами( Меркурий, Венера,...

0 голосов
87 просмотров

Паскаль!!! Нужно написать модель солнечной системы с 3 планетами( Меркурий, Венера, Земля) и 1 спутник(Луна). Чем дальше планеты от солнца тем медленнее они крутятся. Есть код на одну планету, нужно дописать остальное в похожем стиле.

uses crt, graphABC ;
var
x , y , x0 , y0 , rvod , xe , ye , rel , dy , re , i : integer ;
Begin
x := 640 ; // ширина окна
y := 480 ; // высота окна
setwindowsize ( x , y ) ; // устанавливаем размер окна
x0 :=x div 2 ; // центр Х
y0 := y div 2 ; // центр у
rvod :=70 ; // радиус солнца
rel := 10 ; // радиус венеры .
dy :=100 ;
re :=y0 - dy ; // радиус вращения венеры

i :=360 ;
repeat
clearwindow ;
if i=360 then i:= 1 else inc ( i ) ;
setpencolor ( clorange ) ; // yer . цвет пepa
circle ( x0 , y0 , rvod ) ; // солнце
floodfill ( x0 , y0 , clyellow ) ; // заливка фигуры ( солнце )
xe := x0 + round ( re*cos( i*pi / 180 ) ) ;
ye := y0 + round ( re*sin (i*pi / 180 ) ) ;
circle ( xe , ye , rel ) ; // (венера)
delay ( 10 ) ;
until keypressed
End.


Информатика (162 баллов) | 87 просмотров
0

Вот почти доделал, хочу уточнить: Вам для ABC или для ABC.NET - различается не сильно

0

abc.net

0

Переделывать не придётся

0

В ABC.NET в примерах есть вот такое:

0

//Программа "Скозь вселенную". Порт с midletPascaluses GraphABC; type // Описываем тип-элемент Звезда TStar = record X, Y, Z : real; // Положение в пространстве end; const MAX_STARS = 1000; // Кол-во звёздочек SPEED = 200; // Скорость, в единицах/сек var i : Integer; // Наши звёздочки :) Stars : array [1..MAX_STARS] of TStar; // Ширина и высота дисплея scr_W : Integer; scr_H : Integer; // Время time, dt : Integer;

0

// Рисует текущую звёздочку (i), цвета (c) procedure SetPix(c: Integer); var sx, sy : Integer; begin // Данные действия, проецируют 3D точку на 2D полоскость дисплея try sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200)); sy := trunc(scr_H / 2 - Stars[i].Y * 200 / (Stars[i].Z + 200)); except end; try SetPixel(sx, sy, Color.FromArgb(c, c, c)); except end; end; begin MaximizeWindow(); scr_W := Window.Width; scr_H := Window.Height;

0

//случайным образом раскидаем звёздочки randomize; for i := 1 to MAX_STARS do begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; Stars[i].Z := random(1900); end; // Очистка содержимого дисплея (чёрный цвет) ClearWindow(Color.Black); time := Milliseconds; // Главный цикл отрисовки repeat scr_W := Window.Width; scr_H := Window.Height; dt := Milliseconds - time; // Сколько мс прошло, с прошлой отрисовки

0

time := Milliseconds; // Засекаем время for i := 1 to MAX_STARS do begin // Затираем звёздочку с предыдущего кадра SetPix(0); // Изменяем её позицию в зависимости прошедшего с последней отрисовки времени Stars[i].Z := Stars[i].Z - SPEED * dt/1000; // Если звезда "улетела" за позицию камеры - генерируем её вдали if Stars[i].Z <= -200 then begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :)

0

end; // Рисуем звёздочку в новом положении (цвет зависит от Z координаты) SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100)); end; sleep(10); until false; end.

0

Если немного переделать, можно Звёзды в движении на фон поставить

Дан 1 ответ
0 голосов
Правильный ответ

Uses GraphABC;

Var
   R:integer:=70; //радиус Солнца
   A:array[1..4,1..5] of integer;
   //A[1] - x
   //A[2] - y
   //A[3] - r
   //A[4] - r орбиты
   v:real:=0.03;
   k:integer:=10; // Коэффициент масштабирования орбит
Begin
Window.Maximize;
A[1,3]:=10;
A[1,4]:=R+A[1,3]*k;

A[2,3]:=13;
A[2,4]:=A[1,4]+A[2,3]*k;

A[3,3]:=17;
A[3,4]:=A[2,4]+A[3,3]*k;

A[4,3]:=A[3,3] div 4;
A[4,4]:=A[3,3]+A[4,3]*k;

LockDrawing;
SetCoordinateOrigin(Window.Width div 2,Window.Height div 2);

Repeat
Window.Clear;
Brush.Color := clYellow;
FillCircle(0,0,R);

Brush.Color := clGray;
A[1,1]:=round(A[1,4]*Cos(v*3));
A[1,2]:=round(A[1,4]*Sin(v*3));
FillCircle(A[1,1],A[1,2],A[1,3]);

Brush.Color := clOrange;
A[2,1]:=round(A[2,4]*Cos(v*3/4));
A[2,2]:=round(A[2,4]*Sin(v*3/4));
FillCircle(A[2,1],A[2,2],A[2,3]);

Brush.Color := clBlue;
A[3,1]:=round(A[3,4]*Cos(v/4));
A[3,2]:=round(A[3,4]*Sin(v/4));
FillCircle(A[3,1],A[3,2],A[3,3]);

Brush.Color := clGray;
A[4,1]:=A[3,1]+round(A[4,4]*Cos(20*v));
A[4,2]:=A[3,2]+round(A[4,4]*Sin(20*v));
FillCircle(A[4,1],A[4,2],A[4,3]);

v:=v+0.03;
Redraw;
Until false;
End.

(34.0k баллов)