• Главная
  • Блог
  • Пользователи
  • Форум

Вход на сайт

  • Регистрация
  • Забыли пароль?
  • Литературное творчество
  • Музыкальное творчество
  • Научно-техническое творчество
  • Художественно-прикладное творчество

Программа "Моделирование орбитального вращения некоторых планет солнечной системы"

Опубликовано Трущелева Наталья Викторовна вкл 18.02.2016 - 10:42
Трущелева Наталья Викторовна
Автор: 
Штрек Ростислав

П

Скачать:

ВложениеРазмер
Файл modelirovanie_orbitalnogo_vrashcheniya_nekotoryh_planet_solnechnoy_sistemy.docx325.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

E:\конкурс\3.bmp


Минимальные системные требования к персональному компьютеру:

ПК

Delphi 7 Enterprise

Процессор (минимум)

Intel ® Pentium ® 233 МГц

Операционная система

Microsoft ® Windows XP, ™ Windows ® 2000, и Windows ® 98

Оперативная память

64 Мб оперативной памяти (рекомендуется 128 Мб)

Место на диске для компактной установки

124 Мб

Место на диске для полной установки

450 Мб

2.1.Описание алгоритма работы

  1. начало
  2. инициализация окна приложения
  3. задание настройки окна и его размер,
  4. создание  горячих клавиш остановки и завершения работы программы
  5. создание текстур
  6. инициализация
  7. задание координат
  8. выход из программы

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,2E:\конкурс\1.bmpрис.1

E:\конкурс\2.bmpрис.2

Инсталлятор программы(2щелчка)=> SETAP.EXE

Вывод: Таким образом, созданная программа является первым шагом в освоении программирования, началом знакомства с визуальной средой разработки.

В будущем, планируется добавить все планеты солнечной системы.

В планах - добавить свободное передвижение  точки обзора.

.


Список используемой литературы

  1. Артур Маслобоев, Виктор Пестриков :Delphi на примерах ,Серия: На примерах Издательство: БХВ-Петербург Год: 2011
  2. Коржинский С.Н. Изучаем Delphi.SNK Press.Версия:1.0. Страниц:344, 2011
  3. Никита Культин  Программирование в Turbo Pascal 7.0 и Delphi.: БХВ-Петербург: 2011.Страниц: 391
  4. Смирнов С.И. Уроки программирования: Pascal – Delphi. Красноярск Страниц 100, 2011


Отзыв

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

Выбор студентом языка программирования обоснован, так как Delphi - это RAD, или Rapid Application Development - среда быстрой разработки приложений. Delphi включает в себя не только все средства для работы с языком Object Pascal, но и ряд дополнительных средств, призванных максимально ускорить и упростить создание программ. К таковым средствам относятся, прежде всего, визуальный редактор форм, при помощи которого можно быстро разработать дизайн интерфейса «человек-программа».

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

Вкупе с развитыми средствами для написания и отладки кода - специализированным текстовым редактором, оптимизирующим компилятором и отладчиком, Delphi являет собой средство быстрой разработки приложений. При этом основой Delphi для конечного пользователя является IDE - Integrated Development Environment (интегрированная среда разработки), которая объединяет в себе редактор кода и средства визуальной разработки, а также связывает это с компилятором, средствами разработки баз данных и прочими составными частями Delphi.

Процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы.

Кроме того,  разработчик программы получает в свое распоряжение мощные средства отладки и  удобную контекстную справочную систему.

Целью создания данного программного продукта является написание на языке программирования Delphi программы, в которой выполнены настройки, созданы горячие клавиши, текстуры, определены компоненты окна графического пользовательского интерфейса, элементы математического моделирования орбитального вращения планет солнечной системы.

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

Рекомендована дальнейшая работа по включению в моделирование остальных планет солнечной системы.


Поделиться:

10 осенних мастер-классов для детей

Рисуем акварелью: "Романтика старого окна"

Весенняя сказка

Одеяльце

Ворона