Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на Pascal / Delphi / Курсовая работа - Модель движения спутника

.doc
Скачиваний:
106
Добавлен:
02.05.2014
Размер:
6.13 Mб
Скачать

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ОТКРЫТЫЙ УНИВЕРСИТЕТ

Кафедра Информационных систем и измерительной техники

Шифр 600

МОДЕЛЬ ДВИЖЕНИЯ СПУТНИКА

Пояснительная записка курсового проекта

по дисциплине

Компьютерные технологии в приборостроении

V курс

Выполнил _______

подпись

__________

дата

Проверил _______

подпись

__________

дата

Москва, 2007г.

СОДЕРЖАНИЕ

Стр.

Введение · · · · · · · · · · · · · · · · · · · · · · · · · 4

Описание программы · · · · · · · · · · · · · · · · · · · · 5

Вербальная постановка задачи · · · · · · · · · · · · · · · · 8

Процедура обработки событий · · · · · · · · · · · · · · · · 9

Окончательный текст программы · · · · · · · · · · · · · · · 12

Приложение 1. Содержимое диска · · · · · · · · · · · · · · 13

Список литературы · · · · · · · · · · · · · · · · · · · · · 14

ВВЕДЕНИЕ

ФИРЭ.ИИТ.

Подпись

Дата

Разработал

Модель движения

спутника

Лист

Листов

Консультант

4

14

Рук. проекта

МГОУ

Норма контр.

Зав. кафедрой

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

Delphi позволяет разрабатывать как традиционные приложения Windows и приложения работы с базами данных, так и Web-приложения на основе современных технологий.

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

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

Доступ к графической поверхности объекта (свойству Graphics формы или компонента PaintBox) имеет процедура обработки события Paint. Поэтому графику должна выводить именно она.

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

ОПИСАНИЕ ПРОГРАММЫ

ЗАДАЧА: Разработать графическую модель движения спутника вокруг планеты.

Данную задачу будем реализовывать на Delphi. Для этого запускаем редактор Delphi и выберем опцию: «Файл» -> «Новый» -> «Приложение». В результате у нас появится вот такое окно рис.1.

Рис.1. Среда Delphi.

Центральную часть окна Delphi занимает окно дизайнера формы Form1. Слева от окна дизайнера формы находится окно Object Inspector. Вкладка Properties используется для редактирования свойств объектов. Свойство (property) – это одна из характеристик объекта (формы, командной кнопки, поля редактирования и т.д.). Свойства, в частности определяют вид, положение и поведение объекта.

Вкладка Events определяет события, на которые может реагировать объект. Например, щелчок кнопкой мыши – это событие Click, двойной щелчок кнопкой мыши – событие DbClick.

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

5

Установим следующие свойства стартовой формы Form1:

Свойство

Значение

Комментарий

Caption

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

Строка текста, идентифицирующая компонент для пользователя

ClientHeight

500

Высота формы

ClientWidth

630

Ширина формы

BorderStyle

bsSingle

Тонкая граница не позволяет во время работы программы изменить размер окна путем захвата и перемещения границы

BorderIcons

biMaximize

False

В заголовке окна нет кнопки Развернуть

Color

СlWhite

Описание цвета объекта – белый

На форму Form1 добавим следующие компоненты из списка Tool Palette .

1. Компонент TPaintBox который обеспечивает вывод изображения непосредственно на его поверхности. Установим следующие свойства компонента:

Свойство

Значение

Комментарий

Width

500

Ширина формы

Height

500

Высота формы

Left

0

Отступ левой границы компонента от границы формы

2. Компонент BitBtn1, BitBtn2, BitBtn3 – это управляющая кнопка, на поверхности которой можно располагать изображение. Изображение на кнопке задается ее свойством Glyph. Оно представляет собой битовую матрицу, содержащую до 4 изображений размером 16 на 16. Расположение изображения и надписи на кнопке определяется свойствами Margin, Layout и Spacing.

Еще одно свойство - это свойство Kind – определяет тип кнопки, по умолчанию равно bkCustom или предустановленный.

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

6

Свойство

Значение

Комментарий

BitBtn1

Caption

Пауза

Надпись на кнопке

Top

40

Координата верхнего края компонента

Kind

bkAbort

Тип кнопки - пауза

TabOrder

1

Очередь в последовательности табуляции

BitBtn2

Caption

Пуск

Надпись на кнопке

Top

8

Координата верхнего края компонента

Kind

bkIgnore

Тип кнопки - пуск

TabOrder

0

При первом появлении формы на экране в фокусе будет этот компонент

BitBtn3

Caption

Выход

Надпись на кнопке

Top

72

Координата верхнего края компонента

Kind

bkClose

Тип кнопки – выход

TabOrder

2

Очередь в последовательности табуляции

Cancel

True

Выход из программы с помощью клавиши Esc

Общие для BitBtn1, BitBtn2, BitBtn3.

Height

25

Высота кнопки

Width

75

Ширина кнопки

Left

528

Координата левого края компонента

Установим следующие свойства компонента.

3. Компонент Timer – позволяет задавать в приложении интервалы аремении. Таймер имеет два свойства, позволяющие им управлять: Interval = 100 – интервал времени в миллисекундах и Enabled = false – доступность. Таймер точно выдерживает заданные интервалы Interval, если они достаточно велики. Если же задавать интервалы длительностью десятки или единицы миллисекунд, то реальные интервалы времени оказываются заметно больше вследствие различных накладных расходов, связанных с вызовом функции.

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

7

Надо еще сказать, что компонент Timer видимый на форме в виде значка при работе программы видим не будет.

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

Рис.2.

Вербальная постановка задачи

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

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

8

ПРОЦЕДУРА ОБРАБОТКИ СОБЫТИЙ

Как я уже сказал, чтоб программа начала работать, надо щелкнуть на кнопке Пуск. Щелчок на изображении командной кнопки – это пример того, что называется событием (Event). Щелчок кнопкой мыши это событие Click. Реакцией на событие должно быть какое-либо действие. В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, для того чтобы программа выполняла некоторую. Работу в ответ на действия пользователя, программист должен написать процедуру обработки соответствующего события. Значительную часть обработки событий берет на себя компонент. Программист должен разрабатывать процедуру обработки события лишь в том случае, если реакция на событие отличается от стандартной или не определена.

Порядок действий при создании процедуры обработки события:

  1. Щелчком на изображении компонента в форме – кнопке Выход – выбираем объект, для которого нужно создать процедуру обработки события.

  2. После этого в окне Object Inspector выбираем вкладку Events.

  3. На вкладке Events выбираем нужное событие – Click.

  4. Выполняем двойной щелчок левой кнопкой мыши в поле, которое находится справа от названия события.

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

В окне редактора кода прописываем следующую инструкцию обработки события:

procedure TForm1.BitBtn3Click(Sender: TObject); //процедура выхода из программы

begin

close;

end;

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

9

Аналогично поступаем с кнопкой Пуск и прописываем следующую инструкцию обработки события.

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Timer1.Enabled:=true; //Запускается процедура Timer1

BitBtn2.Visible:=true; // Кнопка Пуск остается видимой для пользователя

end;

Аналогично поступаем с кнопкой Пауза и прописываем следующую инструкцию обработки события.

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Timer1.Enabled:=false; // Выполнение процедуры Timer1 останавлиается

BitBtn2.Visible:=true; // Кнопка Пуск остается видимой для пользователя

end;

Для компонента Timer на вкладке Events имеется только одно событие – OnTimer. При двойном щелчке левой кнопкой мыши в поле, которое находится справа от названия события Delphi сгенерирует имя процедуры обработки события – Timer1Timer, и в открывшемся окне редактирования кода мы пропишем следующую инструкцию.

procedure TForm1.Timer1Timer(Sender: TObject);

begin

t:=t+1; {эта строчка обеспечивает приращение координат движения при каждой итерации процедуры}

p1.Canvas.Brush.Color:=clblack; //цвет космоса черный

p1.Canvas.Rectangle(0,0,p1.Width,p1.Height); //Прорисовка космоса

p1.Canvas.Brush.Color:=clyellow; //Цвет солнца - желтый

xSun:=p1.Width div 2; //Координата солнца по x

ySun:=p1.Height div 2; //Координата солнца по y

p1.Canvas.Ellipse(xSun-SunSize,ySun-SunSize,xSun+SunSize,ySun+SunSize);

p1.Canvas.Brush.Color:=clSkyBlue; // Цвет Земли - голубой

wEarth:=(2*pi)/Tearth*t; //Угловая скорость Земли

xEarth:=trunc(EarthRadius*cos(wEarth));//Изменение координ. Х при движении по орб.

yEarth:=trunc(EEarth*EarthRadius*sin(wEarth));//Измен. коор. Y при движении по орб.

p1.Canvas.Ellipse(xSun+xEarth-EarthSize,ySun-yEarth- EarthSize,

xSun+xEarth+EarthSize, ySun-yEarth+EarthSize);

p1.Canvas.Brush.Color:=cl3Dlight; //цвет спутника Землилуны

wLuna:=(2*pi)/TLuna*t; //Угловая скорость луны

xLuna:=trunc(LunaRadius*cos(wLuna)); //Измен. коорд. X при движении по орбите

yLuna:=trunc(LunaRadius*sin(wLuna));//Измен. коорд. Y при движении по орбите

p1.Canvas.Ellipse(xSun+xEarth-xLuna-LunaSize,ySun-yEarth-yLuna- LunaSize,

xSun+xEarth-xLuna+LunaSize,ySun-yEarth-yLuna+LunaSize);

end;

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

10

Для компонента TPaintBox на вкладке Events выбираем событие OnPaint. Событие OnPaint наступает, когда приходит сообщение о необходимости перерисовать испорченное изображении. Перерисовку изображения вызывает процедура Timer, поскольку координаты графических объектов изиеняются при каждой итерации процедуры Timer.

При двойном щелчке левой кнопкой мыши в поле, которое находится справа от названия события Delphi сгенерирует имя процедуры обработки события – P1Paint, и в открывшемся окне редактирования кода мы пропишем следующую инструкцию.

procedure TForm1.P1Paint(Sender: TObject);

begin

t:=0; {обнуление переменной}

p1.Canvas.Brush.Color:=clblack; //цвет космоса черный

p1.Canvas.Rectangle(0,0,p1.Width,p1.Height); //Прорисовка космоса

p1.Canvas.Brush.Color:=clyellow; //Цвет солнца - желтый

xSun:=p1.Width div 2; //Координата солнца по x

ySun:=p1.Height div 2; //Координата солнца по y

p1.Canvas.Ellipse(xSun-SunSize,ySun-SunSize,xSun+SunSize,ySun+SunSize);

p1.Canvas.Brush.Color:=clSkyBlue; // Цвет Земли - голубой

wEarth:=(2*pi)/Tearth*t; //Угловая скорость Земли

xEarth:=trunc(EarthRadius*cos(wEarth));//Изменение координ. Х при движении по орб.

yEarth:=trunc(EEarth*EarthRadius*sin(wEarth));//Измен. коор. Y при движении по орб.

p1.Canvas.Ellipse(xSun+xEarth-EarthSize,ySun-yEarth- EarthSize,

xSun+xEarth+EarthSize, ySun-yEarth+EarthSize);

p1.Canvas.Brush.Color:=cl3Dlight; //цвет спутника Землилуны

wLuna:=(2*pi)/TLuna*t; //Угловая скорость луны

xLuna:=trunc(LunaRadius*cos(wLuna)); //Измен. коорд. X при движении по орбите

yLuna:=trunc(LunaRadius*sin(wLuna));//Измен. коорд. Y при движении по орбите

p1.Canvas.Ellipse(xSun+xEarth-xLuna-LunaSize,ySun-yEarth-yLuna- LunaSize,

xSun+xEarth-xLuna+LunaSize,ySun-yEarth-yLuna+LunaSize);

end;

Как видно, инструкция процедуры TForm1.P1Paint полностью совпадает с инструкцией процедуры TForm1.Timer1Timer за исключением строчки t:=0;”. При взаимодействии этих процедур происходит следующее. Процедура Timer вызывает изменение координат графических объектов за счет изменения значения переменной t на единицу, процедура Paint их прорисовывает и задает их новые координаты как нулевые строчкой t:=0. Через интервал времени Interval = 100 миллисекунд процедура Timer вновь вызывает изменение координат графических объектов, а процедура Paint их заново прорисовывает и т.д. Таким образом создается видимость движения Земли вокруг Солнца и луны вокруг Земли.

ФИРЭ.ИИТ.КТВП.ПЗ

Лист

11

Надо еще сказать, что все переменные и константы, используемые в программе надо объявить в соответствующих разделах программы var и const. Далее программа компилируется и если в программе нет синтаксических ошибок, компилятор создает исполняемый файл программы. Имя исполняемого файла такое же, как и у файла проекта, а расширение – exe.

Окончательный текст программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, System.ComponentModel;

type

TForm1 = class(TForm)

var

Form1: TForm1;

implementation

{$R *.dfm}

const SunSize=35; // радиус Солнца

EarthSize=11; //радиус Земли

EarthRadius=82; //расстояние от Солнца до Земли

TEarth=365.26; //период обращения Земли

LunaSize=4; //радиус Луны

LunaRadius=18; //расстояние от Земли до луны

TLuna=27.32; //период обращения Луны

var t:integer;

xLuna,yLuna, xSun,ySun,xEarth,yEarth:integer; //координаты

wa,wEarth,wLuna:double; //угловая скорость

EEarth:double; //эксцентриситет

procedure TForm1.BitBtn3Click(Sender: TObject);

procedure TForm1.BitBtn2Click(Sender: TObject);

procedure TForm1.BitBtn1Click(Sender: TObject);

procedure TForm1.Timer1Timer(Sender: TObject);

procedure TForm1.P1Paint(Sender: TObject);

procedure TForm1.FormActivate(Sender: TObject);

end.

ФИРЭ.ИИТ.КТВП..ПЗ

Лист

12

ПРИЛОЖЕНИЕ 1.

Содержимое диска.

Project.exe – исполняемый файл.

Project1.dpr – главный модуль

Project1.bdsproj – файл проекта.

Unit1.pas – файл модуля

Курсовой проект.doc – документ MS Word

ФИРЭ.ИИТ.КТВП.ПЗ

Лист

13

СПИСОК ЛИТЕРАТУРЫ

  1. Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям – М.: ООО «Бином-Пресс», 2006 г. – 400 с.

  2. Культин Н.Б. Основы программирования в Delphi. Самоучитель.–СПб.: БХВ-Петербург, 2004 – 400 с.

  3. Архангельский А.Я. Delphi 7. Справочное пособие –М.: ООО «Бином-Пресс», 2004 г. – 1024 с.

ФИРЭ.ИИТ.КТВП.600295.ПЗ

Лист

14

ФИРЭ.ИИТ.ЦИУ.600295.ПЗ

Лист

15

Лист

16

Лист

17

Лист

18

Лист

19

Лист

20

Лист

Лист

Лист