Я пытаюсь закодировать вектор отказа для анимации с мячом и линией в 2D. У меня есть однородные координаты линии, координаты мяча и скорость. При попадании реалов гомо. координаты линии и мяча приближаются к нулю, я хочу запустить метод, который позволяет мячу отскакивать от границы с тем же углом падения, что и тот же угол падения. Как это вычислить?
На мой взгляд, мне нужна нормальная vec линии, где мяч отскакивает, и мне нужно вычислить новые скорости для x, y для мяча, но здесь я борюсь .... Помощь была бы отличной.
Не могли бы вы описать вашу проблему более четко, с формулами и, возможно, с изображением?





Допустим, мы дали следующее:
P1 = (px1, py1) ... line point 1
P2 = (px2, py2) ... line point 2
P1h = (px1, py1, 1) ... homogenous coordinates of line point 1
P2h = (px2, py2, 1) ... homogenous coordinates of line point 2
lh = P1h x P2h ... homogenous coordinates of line (computed with cross product)
v = (vx, vy) ... vector of ball movement
B1 = (bx1, by1) ... ball position 1
B2 = (bx2, by2) = B1 + v ... ball position 2
B1h = (bx1, by1, 1) ... homogenous coordinates of ball position 1
B2h = (bx2, by2, 1) ... homogenous coordinates of ball position 2
Тогда мы можем определить, пересек ли мяч линию, сравнив знаки следующих скалярных произведений:
ball crossed line <==> sign(B1h*lh) != 0 and sign(B1h*lh) != sign(B2h*lh)
Чтобы отразить движение, вы можете вычислить зеркальные изображения B1m и B2mB1 и B2, соответственно, поперек линии. Тогда B2m — новое положение мяча, а vm = B2m - B1m — новое (зеркальное) направление движения мяча.
Как вычислить зеркальное отражение точки P поперек линии l? Предположим, что
P = (px, py) ... point to be mirrored
Ph = (px, py, 1) ... homogenous coordinates of point to be mirrored
Также обратите внимание, что (lh.x, lh.y) является нормальным вектором линии l. Теперь выполните следующие шаги, чтобы вычислить зеркальное отображение PmP поперек l:
|nl| = sqrt(lh.x^2+lh.y^2) ... length of normal vector
lh0 = lh / |nl| ... "normalized" homogenous line, i.e. HNF (Hesse normal form) of line
d = Ph*lh0 ... signed distance of P to l
lhP0 = lh0 + (0,0,d) ... HNF of line parallel to l running through Pm
mh0 = (lh0.y, -lh0.x, 0) ... HNF of line perpendicular to l (parallel to line
through P and Pm)
md = mh0*Ph ... signed distance of P to mh0
mhP0 = mh0 - (0,0,md) ... HNF of line through P and Pm
Pmh = lhP0 x mhP0 ... homogenous coordinates of mirrored point Pm
Под однородной координатой линии вы подразумеваете трехмерный вектор
l, такой чтоl^T * (x, y, 1) = 0для любого(x, y)на линии?