xmov
.+point.ymov*point.ymov);
4 var frames =dis/vel
Этот шаг освежающе короток. Здесь мы вычисляем число кадров, необходимых шару, чтобы добраться из текущей позиции в точку, в которой он сталкивается с линией. Возвращаясь к главе по основам физики, мы вспоминаем, что distance = velocity*frames. Если мы решаем это уравнение для кадров, мы получаем frames = distance/velocity. Так что если мы найдем расстояние между текущим положением и точкой столкновения, и векторную скорость вдоль этой линии, то мы можем найти количество кадров, за которое она попадет туда! В строке 2 мы используем теорему Пифагора вновь для получения расстояния. В строке 3 мы используем ту же теорему еще один раз, для нахождения векторной скорости вдоль траектории. Наконец, в строке 4 мы получаем количество кадров как отношение расстояния и векторной скорости.
Чтобы посмотреть более детально, как время (кадры) могут быть вычислены, смотрите файл line_ball_time_calculation.pdf в папке Chapter05.
В шаге 4 мы проверяем физическую точку контакта, чтобы убедиться, что она находится в границах отрезка линии.
1 //Шаг 3
2 //теперь проверим есть ли контакт точки с отрезком линии
3 var slope2a =-1/tempLine.slope;
4 var b2a =y-slope2a*x;
5 //точка контакта
6 var xa =(tempLine.b-b2a)/(slope2a-tempLine.slope);
7 var ya =slope2a*xa+b2a;
8 if ((xa>tempLine.x1 &&xa<tempLine.x2)
.||(xa<tempLine.x1 &&xa>tempLine.x2)
.||((ya>tempLine.y1 &&ya<tempLine.y2)
.||(ya<tempLine.y1 &&ya>tempLine.y2))){
9 //в пределах границ отрезка
10 }else {
11 //не в границах отрезка
12 //установить значение frame1
13 var frames =1000;
14 }
15 return frames;
Для нахождения координат точки контакта, мы представляем линию, проведенную через центр окружности и точку контакта. Цель состоит в нахождении наклона и координаты y точки пересечения этой линии, (что будет означать, что мы знаем все, что нам нужно) и тогда, имея эту информацию, посмотреть, где эта линия пересекает основную линию