Структурная схема ПО с пошаговой детализацией
Основная программа
Инициализация
Моделирование подпрыгивания
Завершить
Инициализация
Нарисовать меню
Задание параметров
Инициализация мяча
Нарисовать рельефную поверхность
Моделирование подпрыгивания
Цикл Пока не прервано
Переместить мяч
Проверить касание
Анимировать
Все-Цикл
Инициализация мяча
Задать координаты центра мяча 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 – ширина поверхности.
Физически поверхность удобно представить в виде динамического массива точек.