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