Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гафаров_Отчет.doc
Скачиваний:
4
Добавлен:
11.03.2015
Размер:
1.09 Mб
Скачать

3.2 Структурная схема по с пошаговой детализацией

Основная программа

Инициализация

Моделирование подпрыгивания

Завершить

Инициализация

Нарисовать меню

Задание параметров

Инициализация мяча

Нарисовать рельефную поверхность

Моделирование подпрыгивания

Цикл Пока не прервано

Переместить мяч

Проверить касание

Анимировать

Все-Цикл

Инициализация мяча

Задать координаты центра мячаXиY

Задать радиусRadius

Задать начальную скоростьZeroSpeed

Задать начальный угол движенияAlpha

Задать начальные координаты движения ZeroX:=X;ZeroY:=Y;

Задать текущее время TimeMoment := 0

Переместить мяч

Увеличить текущее время

Рассчитать координаты мяча

X := ZeroX + TimeMoment * ZeroSpeed * Cos(Alpha)

Y := ZeroY + TimeMoment * ZeroSpeed * Sin(Alpha) – 9.8 * Sqr(TimeMoment) / 2

Рассчитать скорость мяча

Speed := Sqrt(Sqr(TimeMoment * ZeroSpeed * Cos(Alpha)) +

Sqr(TimeMoment * ZeroSpeed * Sin(Alpha) – 9.8 * TimeMoment))

Проверить касание

Найти минимальное расстояние до поверхности Smin

Найти расстояние от мяча до границ экранаS.

Если Smin <= Radius или S <= Radius, то

Рассчитать параметры движения

Рассчитать параметры движения

Найти угол падения Teta

Рассчитать угол Alpha:=Pi–Teta

Задать начальную скоростьZeroSpeed := Speed

Задать текущее времяTimeMoment := 0

Задать начальные координаты движенияZeroX:=X;ZeroY:=Y;

Программа

Нарисовать меню

Задание параметров

Задать координаты центра мяча XиY

Задать радиус Radius

Задать начальную скорость ZeroSpeed

Задать начальный угол движения Alpha

Задать начальные координаты движения ZeroX:=X;ZeroY:=Y;

Задать текущее время TimeMoment := 0

Нарисовать рельефную поверхность

ЦиклПока не прервано

Увеличить текущее время

Рассчитать координаты мяча

X:=ZeroX+TimeMoment*ZeroSpeed*Cos(Alpha)

Y := ZeroY + TimeMoment * ZeroSpeed * Sin(Alpha) – 9.8 * Sqr(TimeMoment) / 2

Рассчитать скорость мяча

Speed := Sqrt(Sqr(TimeMoment * ZeroSpeed * Cos(Alpha)) +

Sqr(TimeMoment * ZeroSpeed * Sin(Alpha) – 9.8 * TimeMoment))

Найти минимальное расстояние до поверхностиSmin

Найти расстояние от мяча до границ экрана S.

Если Smin <= Radius или S <= Radius, то

Найти угол падения Teta

Рассчитать угол Alpha:=Pi–Teta

Задать начальную скорость ZeroSpeed:=Speed

Задать текущее время TimeMoment:= 0

Задать начальные координаты движения ZeroX:=X;ZeroY:=Y;

Анимировать

Все-Цикл

Завершить

3.3 Структуры данных

Для работы программы необходимы структуры данных, описывающие следующие сущности: мяч, параметры движения мяча, поверхности. Далее приведено математическое описание структур данных, и проекция на физические типы языка ObjectPascal.

Мяч= <X;Y; Скорость; Радиус >,

где X,YR– координаты центра мяча;

Скорость R– текущая скорость мяча;

Радиус{0,1,2... 2 147 483 648} – радиус мяча.

Физически данные о мяче можно представить в виде записи. Координаты X и Y, а также Скорость необходимо представить типомDouble, Радиус типомInteger.

Параметры движения мяча= <X0;Y0;Xp;Yp; Начальная скорость; Альфа; Текущее время >,

где X0,Y0R– координаты центра мяча в момент времениt0=0;

Xp;YpR– координаты центра мяча в предыдущий момент времени;

Начальная скорость R– скорость мячав момент времениt0=0;

Альфа R– угол наклона вектора скорости относительно оси абсцисс в момент времениt0=0;

Текущее времяR– текущее время движения по параболе.

Физически параметры движения мяча также можно представить с помощью типа record, с полями типаDouble.

Поверхность= {Точкаi|i= 0..n},

где Точкаi– точечная параX,Y;

n– ширина поверхности.

Физически поверхность удобно представить в виде динамического массива точек.