Простой способ сделать это (на мой взгляд):
- Когда вы создаете линию, вычислите матрицу, которая повернет ее в горизонтальное положение, и вычислите обратную величину этой матрицы.
- Когда мяч сталкивается с линией:
- вращение вектора скорости на матрицу вращения
- изменить знак компонента y
- вращать вектор скорости обратно пропорционально матрице вращения.
Матрица вращения задается как:
( cos A , sin A )
( -sin A , cos A )
Матрица обратного вращения задается как:
( cos A , -sin A )
( sin A , cos A )
где A - угол между линией и горизонталью.
Выше используются стандартные математические соглашения (положительные x и y - верхний правый квадрант, 0 радиан - в положительном направлении вдоль оси x, а углы увеличиваются против часовой стрелки.