Рассчитать с вектором падения вектор отказа

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

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

Под однородной координатой линии вы подразумеваете трехмерный вектор l, такой что l^T * (x, y, 1) = 0 для любого (x, y) на линии?

Nico Schertler 13.03.2019 04:05

Не могли бы вы описать вашу проблему более четко, с формулами и, возможно, с изображением?

MBo 13.03.2019 08:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Допустим, мы дали следующее:

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

Другие вопросы по теме