Прежде всего, чтобы рассчитать обнаружение столкновения между сферой (круг в 2D) и линией, вам нужно вычислить перпендикулярный вектор между центром движущегося шара и линией, чтобы вычислить это расстояние, вам нужно сделать следующее:
Таким образом, чтобы вычислить d на рисунке выше, нам нужно сделать несколько шагов.
- Предположим, что ваша линия использует параметрическое уравнение P (t) = S + t V. Обратите внимание, что V - это направление линии, которое можно получить вычитанием (P2 - P1).
- Из Пифагора:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Затем вы расширяете уравнение, чтобы получить следующее: оно кажется немного сложным, но на самом деле это не так.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) точка V ) ^ 2 / V ^ 2)
Где Q - центр круга, а S - любая точка на линии. Когда расстояние меньше радиуса круга / сферы, вам нужно вызвать реакцию на столкновение, что объясняется в следующей точке.
Неправильно всегда переворачивать компонент x или y, чтобы отскочить от мяча, вам нужно отразить вектор скорости, для этого вам нужно рассчитать вектор нормали поверхности и использовать эту нормаль для расчета отражения вектор с использованием следующего уравнения
R = 2 * ( V точка N ) * N - V
где R - вектор отражения, N - нормаль поверхности, а V - вектор скорости.
В случае 45 градусов нормаль к поверхности будет равна N = (1,1,0) с изменяющимся знаком, в зависимости от того, в каком направлении расположены грани (положение или отрицание).