П
Вложение | Размер |
---|---|
modelirovanie_orbitalnogo_vrashcheniya_nekotoryh_planet_solnechnoy_sistemy.docx | 325.26 КБ |
ГБОУ СПО Калужской области
«Калужский торгово-экономический колледж»
Программа «Моделирование орбитального вращения некоторых планет солнечной системы»
Выполнил: Штрек Р.С.
студент группы 2ИС
специальность «Информационные
системы (по отраслям)»
Научный руководитель:
Трущелева Н.В.
Калуга, 2015
Аннотация
Представлена программа «Моделирование орбитального вращения некоторых планет солнечной системы», разработанная на языке программирования высокого уровня Delphi 7.0 (далее - Delphi).
Delphi - это визуальная среда разработки программ для Windows. В ней есть все возможности для быстрого создания приложений Windows, она интуитивно понятна.
Delphi позволяет создавать программы, не углубляясь в изучение особенностей операционной системы.
Эти возможности языка позволяют даже новичку в области программирования, быстро создавать прикладные программы.
Теоретические сведения
Существует достаточно большое количество языков программирования. Все они предназначены для своих целей. На любом языке можно написать практически все что угодно, просто каждый язык будет подходить для своих конкретных целей гораздо лучше чем все остальные.
Delphi является одним из языком программирования, обладающим удобной визуальной средой для быстрой разработки приложений.
Delphi это визуальная среда разработки программ для Windows в которой присутсвуют многие возможности для разработки приложений Windows. Можно сказать, что Delphi – это, в какой-то степени, продолжение языка Borland Object Pascal 7 для DOS.
Delphi обладает достаточно большими возможностями, начиная от проектировщика форм и кончая поддержкой многих форматов популярных баз данных [2].
В Delphi сделать первый шаг очень просто, она интуитивно понятна. Начинающим программистам Delphi позволяет начать создавать программы сразу, не углубляясь в изучение особенностей операционной системы. Поэтому программист может сразу сосредоточиться на логике и визуализации работы будущей программы.
Программисты Delphi могут создавать на основе единого исходного текста приложения для Windows и для Linux, а в последних версиях – для Макинтош, мобильных платформ Windows и Андроид. Это открывает новые возможности и увеличивает потенциальную отдачу от усилий, вложенных в изучение Delphi. В Delphi используется кросс-платформенная библиотека компонентов и визуальные дизайнеры для создания высокопроизводительных приложений для Windows, которые повторной компиляцей можно легко превратить в приложения для Linux.
При создании графического интерфейса приложений Delphi программисту доступен большой список визуальных компонент, таких, как формы, кнопки, списки, поля редактирования, календари, визуализация графики, элементы деловой графики и многое другое. Это означает, что не нужно разрабатывать все с нуля кода при добавлении нужного функционала в приложение. Достаточно "положить" их на Форму, как в графическом редакторе. Можно также добавить на Форму элементы управления ActiveX, для создания в считанные минуты специализированных программ таких, например, как веб-браузеры. Delphi позволяет разработчикам дизайна внедрять в интерфейс новые элементы и кодировать их события одним щелчком мыши.
Delphi поставляется в различных конфигурациях, настроенных на потребности различных предприятий. В Delphi можно писать программы для Windows быстрее и легче, чем это было возможно раньше [1].
Преимущества и особенности Delphi:
- быстрота разработки приложения;
- удобная IDE
- высокая производительность разработанного приложения;
- низкие требования разработанного приложения к ресурсам компьютера;
- наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi;
- возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходниках);
- удачная проработка иерархии объектов;
- возможность создавать распределенные приложения на базе СОМ и CORBA, Интернет и Интранет-приложения.
- доступно огромное количество визуальных компонентов третьих фирм, часть из которых freeware, часть shareware, часть - коммерческих.
- мощные средства отладки (вплоть до пошагового выполнения команд процессора)
- средства коллективной работы над проектом
- встроенные компоненты доступа к данным: BDE, ODBC или ADO
- возможность создания компонентов ActiveX без использования Microsoft IDL
- поддержка многозвенной технологии (multi-tiered) доступа к данным
- язык поддерживает все требования, предъявляемые к объектно-ориентированному языку программирования.
- язык поддерживает обработки исключительных ситуаций, а также перегрузку методов и подпрограмм (overload) в стиле C++.
- возможность создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать шаблоны проектов и "мастеров", создающих заготовки проектов [3]
2. Практическая часть
Для применения полученных знаний программирования на практике было решено разработать программу, моделирующую орбитальное вращение некоторых планет солнечной системы вокруг Солнца.
Для написания программы была выбрана среда Delphi 7.0
Минимальные системные требования к персональному компьютеру:
ПК | Delphi 7 Enterprise |
Процессор (минимум) | Intel ® Pentium ® 233 МГц |
Операционная система | Microsoft ® Windows XP, ™ Windows ® 2000, и Windows ® 98 |
Оперативная память | 64 Мб оперативной памяти (рекомендуется 128 Мб) |
Место на диске для компактной установки | 124 Мб |
Место на диске для полной установки | 450 Мб |
2.2.Исходные коды программы.
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
DC: HDC;
hrc: HGLRC;
procedure Init;
procedure SetDCPixelFormat;
procedure PrepareImage(bmap: string);
protected
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
const
Earth = 1;
Moon = 2;
sun = 3;
Mercury = 4;
Venus = 5;
dvd = 360.0/1000.0;
var
frmGL: TfrmGL;
Angle: GLfloat = 0;
Angle2: GLfloat = 0;
Angle3: GLfloat = 0;
Angle4: GLfloat = 0;
time: Longint;
implementation
{$R *.DFM}
{текстуры}
procedure TfrmGL.PrepareImage(bmap: string);
type
PPixelArray = ^TPixelArray;
TPixelArray = array[0..0] of Byte;
var
Bitmap: TBitmap;
Data: PPixelArray;
BMInfo: TBitmapInfo;
I, ImageSize: Integer;
Temp: Byte;
MemDC: HDC;
begin
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(bmap);
with BMinfo.bmiHeader do begin
FillChar(BMInfo, SizeOf(BMInfo), 0);
biSize := sizeof(TBitmapInfoHeader);
biBitCount := 24;
biWidth := Bitmap.Width;
biHeight := Bitmap.Height;
ImageSize := biWidth * biHeight;
biPlanes := 1;
biCompression := BI_RGB;
MemDC := CreateCompatibleDC(0);
GetMem(Data, ImageSize * 3);
try
GetDIBits(MemDC, Bitmap.Handle, 0, biHeight, Data,
BMInfo, DIB_RGB_COLORS);
for I := 0 to ImageSize - 1 do begin
Temp := Data[I * 3];
Data[I * 3] := Data[I * 3 + 2];
Data[I * 3 + 2] := Temp;
end;
glTexImage2d(GL_TEXTURE_2D, 0, 3, biWidth,
biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, Data);
finally
FreeMem(Data);
DeleteDC(MemDC);
Bitmap.Free;
end;
end;
end;
{Инициализация}
procedure TfrmGL.Init;
const
LightPos: array[0..3] of GLFloat = (10.0, 10.0, 0.0, 1.0);
var
Quadric: GLUquadricObj;
begin
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, @LightPos);
Quadric := gluNewQuadric;
gluQuadricTexture(Quadric, TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
glNewList(Sun, GL_COMPILE);
prepareImage('sun3.bmp');
gluSphere(Quadric, 2.0, 24, 24);
glEndList;
glNewList(Earth, GL_COMPILE);
prepareImage('earth.bmp');
gltranslatef(12, 0, 0);
gluSphere(Quadric, 1.0, 24, 24);
glEndList;
glNewList(Venus, GL_COMPILE);
prepareImage('venus.bmp');
gltranslatef(8, 0, 0);
gluSphere(Quadric, 0.8, 24, 24);
glEndList;
glNewList(Mercury, GL_COMPILE);
prepareImage('mercury.bmp');
gltranslatef(4, 0, 0);
gluSphere(Quadric, 0.5, 24, 24);
glEndList;
glNewList(Moon, GL_COMPILE);
prepareImage('moon.bmp');
gltranslatef(2, 0, 0);
gluSphere(Quadric, 0.2, 24, 24);
glEndList;
gluDeleteQuadric(Quadric);
glEnable(GL_DEPTH_TEST);
end;
{картинки}
procedure TfrmGL.WMPaint(var Msg: TWMPaint);
var
ps: TPaintStruct;
dt: longint;
begin
BeginPaint(Handle, ps);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
//-------------------
gltranslatef(0, 0, 0);
glPushMatrix;
glRotatef(Angle4, 0.0, 1.0, 1.0);
glCallList(sun);
glPopMatrix;
//-------------------
glPushMatrix;
glRotatef(Angle2, 0.0, 0.0, 1.0);
glCallList(Mercury);
glPopMatrix;
glPushMatrix;
glRotatef(Angle3, 0.0, 0.0, 1.0);
glCallList(Venus);
glPopMatrix;
glPushMatrix;
glRotatef(Angle, 0.0, 0.0, 1.0);
glCallList(Earth);
glRotatef(Angle * 2, 0.0, 0.0, 1.0);
glCallList(Moon);
glPopMatrix;
//-------------------
SwapBuffers(DC);
EndPaint(Handle, ps);
dt := round((GetTickCount - time) * dvd);
// Earth
Angle := Angle + 0.25 * dt;
if Angle >= 360.0 then Angle := 0.0;
// Mercury
Angle2 := Angle2 + 0.5 * dt;
if Angle2 >= 360.0 then Angle2 := 0.0;
// Venus
Angle3 := Angle3 + 0.3 * dt;
if Angle3 >= 360.0 then Angle3 := 0.0;
// Sun
Angle4 := Angle4 + 0.1 * dt;
if Angle4 >= 360.0 then Angle4 := 0.0;
time := GetTickCount;
InvalidateRect(Handle, nil, False);
end;
{окно}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
Init;
time := GetTickCount;
end;
{размер окна}
procedure TfrmGL.FormResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 1500.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0.0, 0.0, -80.0);
glRotatef(-45.0, 0.0, -1.0, -1.0);
InvalidateRect(Handle, nil, False);
end;
{Конец работы программы}
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
glDeleteLists(Earth, 2);
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(Handle, DC);
DeleteDC(DC);
end;
{нажатия клавиши}
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then Close;
end;
{формат пикселей}
procedure TfrmGL.SetDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;
end.
Моделирование вращения представлено в статичном виде на рисунках 1,2рис.1
рис.2
Инсталлятор программы(2щелчка)=> SETAP.EXE
Вывод: Таким образом, созданная программа является первым шагом в освоении программирования, началом знакомства с визуальной средой разработки.
В будущем, планируется добавить все планеты солнечной системы.
В планах - добавить свободное передвижение точки обзора.
.
Список используемой литературы
Отзыв
Программирование - это разработка алгоритмов решения задач, организация структур данных и использование языка программирования для создания приложений для той или иной аппаратной и операционной платформ.
Выбор студентом языка программирования обоснован, так как Delphi - это RAD, или Rapid Application Development - среда быстрой разработки приложений. Delphi включает в себя не только все средства для работы с языком Object Pascal, но и ряд дополнительных средств, призванных максимально ускорить и упростить создание программ. К таковым средствам относятся, прежде всего, визуальный редактор форм, при помощи которого можно быстро разработать дизайн интерфейса «человек-программа».
В результате время разработки программ существенно сокращается, поскольку отпадает необходимость просчитывать вручную расположение каждого элемента пользовательского интерфейса.
Вкупе с развитыми средствами для написания и отладки кода - специализированным текстовым редактором, оптимизирующим компилятором и отладчиком, Delphi являет собой средство быстрой разработки приложений. При этом основой Delphi для конечного пользователя является IDE - Integrated Development Environment (интегрированная среда разработки), которая объединяет в себе редактор кода и средства визуальной разработки, а также связывает это с компилятором, средствами разработки баз данных и прочими составными частями Delphi.
Процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы.
Кроме того, разработчик программы получает в свое распоряжение мощные средства отладки и удобную контекстную справочную систему.
Целью создания данного программного продукта является написание на языке программирования Delphi программы, в которой выполнены настройки, созданы горячие клавиши, текстуры, определены компоненты окна графического пользовательского интерфейса, элементы математического моделирования орбитального вращения планет солнечной системы.
Студентом получены первые навыки работы в среде быстрой разработки приложений.
Рекомендована дальнейшая работа по включению в моделирование остальных планет солнечной системы.
10 осенних мастер-классов для детей
Рисуем акварелью: "Романтика старого окна"
Весенняя сказка
Одеяльце
Ворона