Поэтому прежде чем препарировать FLA файл примера, давайте посмотрим, как сделать то, что находится в шагах 2 и 3.
Close-up view
Вид крупным планом
Результат в шаге 1 показывает нам, где траектория окружности пересекает линию. Эта точка пересечения находится в том месте, где центр окружности мог бы соприкоснуться с линией, если бы она двигалась дальше по ее траектории. (После того, как мы добавим реакцию на столкновения с следующей главе, окружность не продвинется так далеко; она среагирует и отскочит рикошетом, когда ее край соприкоснется с линией). Как вы можете увидеть, это не та точка, в которой происходит первое столкновение. Если бы вы взяли окружность и отступили назад вдоль ее траектории до тех пор, пока одна точка пересекается с линией, то вы могли бы обнаружить точку столкновения. Мы можем найти эту точку, применяя тригонометрию. Прямоугольный треугольник образован радиусом окружности; отрезком траектории окружности между пересечением линии с линией и точкой столкновения; и частью линии, которая находится между этими двумя пересечениями.
Угол gamma на иллюстрации выше представляет собой разность между углом траектории шара и углом линии. Наша цель в этом шаге состоит в нахождении положения окружности, когда она впервые касается линии. Помните, что мы собираемся искать это положение, используя тригонометрию. Внимательно посмотрите на иллюстрацию выше, которая поможет вам понять отношения между значениями, которые мы используем. Длина отрезка траектории, r, равна radius/sin(gamma). Мы находим это отношение, рассматривая прямоугольный треугольник и используя информацию о проекциях, рассмотренную в Главе 3, «Тригонометрия 101». Это отношение сообщает нам длину указанного отрезка линии. Пользуясь этой информацией, мы можем снова использовать тригонометрию для поиска положения окружности. Положение x окружности в начале столкновения равно координате x пересечения линии с траекторией, минус r*cos(theta). А координата y окружности в начале столкновения равна координате y пересечения траектории с линией, минус r*sin(theta)