Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
ВалероФил
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 5
#1

блок-схема к моделированию движения планет - Delphi

28.05.2011, 05:45. Просмотров 2220. Ответов 0
Метки нет (Все метки)

Не могу никак составить корректную блок-схему к программе..Поможете?
Тема моделирование движения планет по закону Кеплера.Здесь вроде должна состоять из двух блоков, в которых первый - расчет скорости и ускорения, а второй - расчитывание траектории. Но требуют показать в блок-схеме полный расчет траектории движения планеты вокруг солнца.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
type TPlanet = record
     Name: String;
     Masse: Extended;
     X,Y: Extended;
     Vx,Vy: Extended;
     Ax,Ay: Extended;
     end;
 
var 
SSP: array [0..9] of TPlanet; // Массив предустановленных планет (Sun Systems Planet)
 
 
 
Ввод данных производится самой программой в процедуре создания формы:
procedure TfMain.FormCreate(Sender: TObject);
var i: Integer;
begin
ShowTrack:= True;
AutoScale:= False;
 
Map.Series[0].Clear;
Map.Series[1].Clear;
Map.Series[2].Clear;
 
Map.Series[0].AddXY(0,0,'Базовое тело',Word(clYellow));
 
edObjects.Cells[0,0]:= 'Метка';
edObjects.Cells[1,0]:= 'Название';
edObjects.Cells[2,0]:= 'Масса (10^23 кг)';
edObjects.Cells[3,0]:= 'Расстояние (км)';
edObjects.Cells[4,0]:= 'Координаты';
edObjects.Cells[5,0]:= 'Скорость (км/с)';
 
SSP[0].Name:= 'Солнце';
SSP[0].Masse:= 59.760 * 1E+23;
SSP[0].X:= 0;
SSP[0].Y:= 0;
SSP[0].Vx:= 0;
SSP[0].Vy:= 0;
SSP[0].Ax:= 0;
SSP[0].Ay:= 0;
 
edObjects.Cells[0,1]:= 'Базовое тело';
edObjects.Cells[1,1]:= 'Солнце';
edObjects.Cells[2,1]:= '59.760';
edObjects.Cells[3,1]:= '0';
edObjects.Cells[4,1]:= '0 : 0';
edObjects.Cells[5,1]:= '0 (км/с)';
 
SSP[1].Name:= 'Меркурий';
SSP[1].Masse:= 0.4;
SSP[1].X:= 13.6*1E6;
SSP[1].Y:= 0;
SSP[1].Vx:= 0;
SSP[1].Vy:= 6500;
SSP[1].Ax:= 0;
SSP[1].Ay:= 0;
 
SSP[2].Name:= 'Венера';
SSP[2].Masse:= 4.872;
SSP[2].X:= 108.21*1E6;
SSP[2].Y:= 0;
SSP[2].Vx:= 0;
SSP[2].Vy:= 3502;
SSP[2].Ax:= 0;
SSP[2].Ay:= 0;
 
{Остальные планеты Солнечной системы с данными и параметрами}
 
SSP[9].Name:= 'Плутон';
SSP[9].Masse:= 0.1;
SSP[9].X:= 5900*1E6;
SSP[9].Y:= 0;
SSP[9].Vx:= 0;
SSP[9].Vy:= 40;
SSP[9].Ax:= 0;
SSP[9].Ay:= 0;
 
edPlanets.ItemIndex:=2;
  i:= edPlanets.ItemIndex+1;
 
  edObjects.Cells[0,2]:= 'Дополнительное тело';
  edObjects.Cells[1,2]:= SSP[i].Name;
  edObjects.Cells[2,2]:= FloatToStr(SSP[i].Masse);
  edObjects.Cells[3,2]:= FloatToStr(sqrt(sqr(SSP[i].X*K_R)+sqr(SSP[i].Y*K_R)) / K_R);
  edObjects.Cells[4,2]:= FloatToStr(SSP[i].X)+ ' : '+FloatToStr(SSP[i].Y);
  edObjects.Cells[5,2]:= FloatToStr(sqrt(sqr(SSP[i].Vx*K_R)+sqr(SSP[i].Vy*K_R)) / K_R);
 
  B:= SSP[i];
end;
 
 
Моделирование движения располагается в двух процедурах – в процедуре кнопки «Старт симуляции» и в процедуре таймера Timer.
 
procedure TfMain.Button2Click(Sender: TObject);
begin
if edObjects.Cells[1,2] = '' then
  begin
  ShowMessage('Введите данные для моделирования,'#13#10'либо выбирите планету из списка');
  Exit;
  end;
  
Map.Series[0].Clear;
Map.Series[1].Clear;
Map.Series[2].Clear;
 
Map.Series[0].AddXY(0,0,'Базовое тело');
 
A:= SSP[0];
try
B.Name:= edObjects.Cells[1,2];
B.Masse:= StrToFloat(edObjects.Cells[2,2]);
B.X:= StrtoFloat(edObjects.Cells[3,2]);
B.Y:= 0;
B.Vy:= StrtoFloat(edObjects.Cells[5,2]);
B.Vx:= 0;
except // В случае ошибки преобразования типов
  ShowMessage('Ошибка в преобразовании типов'#13#10'Проверьте введеные данные');
  Exit;
end;
 
StartSimulation:= True;
Timer.Enabled:= True;
Map.Series[1].AddXY(B.X,B.Y,'Дополнительное тело');
end;
 
procedure TfMain.TimerTimer(Sender: TObject);
const
  gamma = 6.6720 * 0.00000000001;
  dt = 1 / 250000;
var
  i: Integer;
  taccel: Extended;
  PlanetMass,SatelliteMass: Extended;
 
begin
Application.ProcessMessages;
if Application.Terminated then Application.Terminate;
 
if not StartSimulation then Exit;
 
PlanetMass:= A.Masse;
SatelliteMass:= B.Masse;
 
  taccel := Timer.Interval;
 
  for i := 1 to 500000 do
  begin
  with B do
  begin
    aX := -(gamma * PlanetMass * SatelliteMass / (sqr(X) + sqr(Y))) * (X / sqrt(sqr(X) + sqr(Y)));
    aY := -(gamma * PlanetMass * SatelliteMass / (sqr(X) + sqr(Y))) * (Y / sqrt(sqr(X) + sqr(Y)));
    VX := VX + aX * dt * taccel;
    VY := VY + aY * dt * taccel;
    X := X + VX * dt * taccel;
    Y := Y + VY * dt * taccel;
  end;
  end;
 
// Вывод данных
fData.Data.Clear;
fData.Data.Lines.Add('Текущие координаты тела(X;Y):');
fData.Data.Lines.Add(FloatToStr(B.X)+' ; '+FloatToStr(B.Y));
fData.Data.Lines.Add('Текущая скорость тела:');
fData.Data.Lines.Add('Полная: '+FloatToStr(sqrt(sqr(B.Vx)+sqr(B.Vy)))+' км/с');
fData.Data.Lines.Add('V(x): '+FloatToStr(B.Vx)+' V(y): '+FloatToStr(B.Vy));
fData.Data.Lines.Add('Текущее ускорение тела:');
fData.Data.Lines.Add('Полное: '+FloatToStr(sqrt(sqr(B.ax)+sqr(B.ay))));
fData.Data.Lines.Add('a(x): '+FloatToStr(B.ax)+' a(y): '+FloatToStr(B.ay));
 
// Обновление графиков
if ShowTrack then
Map.Series[2].AddXY(B.X/1E6, B.Y/1E6) else
 Map.Series[2].Clear;
 
 
Map.Series[1].Clear;
Map.Series[1].AddXY(B.X/1E6, B.Y/1E6, 'Дополнительное тело');
 
// Обрезка серий
if Map.Series[2].Count > 1E4 then Map.Series[2].Delete(0);
 
// Количество элементов траектории
fData.Data.Lines.Add('Текущее количество точек траектории: '+IntToStr(Map.Series[2].Count)); 
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 05:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос блок-схема к моделированию движения планет (Delphi):

блок-схема
Люди помогите пожалуйста, нарисуйте блок схему в ворде procedure gauss(n:...

Блок-схема
Ребят, помогите пожалуйста, делаю курсовую, осталось только блок схему (у меня...

Блок схема With do
Помогите пожалуйста, как будет выглядеть блок схема к этому куску: with...

Блок-схема по нахождению кротчайшего пути
Постройте пожалуйста б/c алгоритма метода по нахождению кротчайшего пути между...

Блок-схема
Может кто нибудь нарисовать блок-схему к программе на формате а1?с учетом формы...

Блок-схема для БД Библиотека
Доброго времени суток. Есть готовая программа, сама БД сделана в Access,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2011, 05:45
Привет! Вот еще темы с решениями:

Показ на экране движения планет по орбите
Собственно нужна прога которая будет показывать на экране движения планет по...

Реализовать модель движения планет вокруг Солнца
y:=0; m:=1.989e+30; x:=0; dy:=0; m:=3.303e+23;...

Даны некоторые характеристики движения планет Солнечной системы
Составить базу данных, учитывая измерение по некоторым параметрам в разных...

Составить программу демонстрации движения планет вокруг Солнца
Составить программу демонстрации движения планет вокруг Солнца.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru