Решим следующую задачу. Необходимо создать математическую модель траектории полёта теннисного мяча, которая с достаточной степенью точности приближалась бы к реальному процессу.
Можно выделить 2 основных пути создания базовой программы, в зависимости от которых выбирается модель полёта: 1. вид сверху; 2. вид сбоку.
При использовании первого пути траектория полёта мяча будет линейной. Если идти вторым путём, то мяч будет лететь по параболе; при этом возможна ситуация недолёта мяча, необходимо перемещать ракетку в двух координатах, управлять вектором и силой удара – то есть задача усложняется как минимум на три порядка, и к тому же теряется наглядность.
Поэтому я решила идти первым путём. Каким же образом осуществляется выбор траектории мяча и его движение? Это происходит таким образом. Предположим, мяч только что был отбит с левой стороны. Известны начальные координаты (хмин, у1) положения мяча. Упростив задачу оператору, считаем, что виртуальный игрок сам выбирает направление удара. Тогда нам будет известна вторая точка в траектории полёта мяча: (хмакс, у2), где у2 выбирается случайным образом по всей ширине корта (высоте части экрана, выделенного под корт). Так как траектория мяча линейная, то по двум известным точкам можно построить уравнение линии. В данном случае я нахожу длины катетов (хмакс-хмин), (у2-у1) и через арктангенс нахожу угол наклона гипотенузы. Далее циклически увеличиваю длину гипотенузы от нуля на некоторое приращение, умножаю её на косинус и синус угла наклона, таким образом получаю приращение по х и у координат положения мяча – таким образом мяч двигается по необходимой траектории.
Старое изображение мяча необходимо стирать. Можно было просто рисовать на его месте чёрный квадрат, но при этом происходило бы стирание изображения теннисной сетки и разделительной линии, поэтому я поступила мудрее: нарисовала мяч и скопировала его битовый образ. При рисовании мяча я просто выводила его битовый образ на экран с маской XOR. Когда же нужно было стереть изображение мяча, я просто ещё раз выводила туда же изображение мяча с этой же маской. Таким образом, изображение мяча пропадало, а рисунок фона восстанавливался. Поэтому при пролетании над сеткой мяч не стирает её изображение.
Регулирование скорости полёта мяча возможно двумя способами: • увеличением аргумента оператора Delay(); • уменьшением величины приращения гипотенузы, но при этом происходит мерцание ракетки компьютера.