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

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

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

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

Завершить

 

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

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

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

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

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

 

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

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

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

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

Анимировать

Все-Цикл

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

Задать координаты центра мяча 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;

Анимировать

Все-Цикл

Завершить

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

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

 

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