рассчитать с вектором падения вектор отказа - PullRequest
0 голосов
/ 13 марта 2019

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

По моему мнению, мне нужен нормальный вектор линии, где мяч подпрыгивает, и мне нужно вычислить новые скорости для x, y для мяча, но там я борюсь ... Помощь была бы отличной.

1 Ответ

1 голос
/ 13 марта 2019

Предположим, мы дали следующее:

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 и B2m из B1 и 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.Теперь выполните следующие шаги для вычисления зеркального отображения Pm из P по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...