Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сместить мяч при отскоке от стены , чтобы убрать погрешность (http://www.flasher.ru/forum/showthread.php?t=211389)

Marlin 20.08.2015 08:00

Сместить мяч при отскоке от стены , чтобы убрать погрешность
 
Здравствуйте, появилась проблема, мяч летит в стену под углом,

при ударении в стену, он немного "входит" в нее(получается 2 точки пересечения со стеной), нужно СМЕСТИТЬ его обратно (по направлению противоположному вектору движения) на такое расстояние чтобы была одна точка соприкосновения со стеной, и уже потом менять вектор движения как угол падения = углу отражения. Так вот каким образом найти это СМЕЩЕНИЕ, чтобы не накапливалась ошибка.

callme 20.08.2015 08:12

Найти точку пересечения отрезка стены с отрезком перемещения мяча.
http://stackoverflow.com/questions/5...ents-intersect

Marlin 20.08.2015 10:34

Вложений: 1
Вот нарисовал рисунокВложение 31764

О2 - точка где сейчас мяч, должен он в итоге оказаться в О1, чтобы его можно было из этой точки отразить.
O2A - дистанция между центром мяча и стеной,
O2B - радиус мяча,
A - точка идеального касания мяча и стены(когда мяч не вошел в стену и центр его в О1)

V - вектор скорости мяча,
нужно найти вектор O2 - O1, Он равен DB.

Цитата:

Сообщение от callme (Сообщение 1185880)
Найти точку пересечения отрезка стены с отрезком перемещения мяча.

как видно из рисунка, точка С - не точка касания, и соответственное ее нахождение ничего не даст, а хотя нет, с помощью нее можно будет найти длину O2C , и по пропорции треугольников ADB и ACO2 найти DB, щас буду пробовать..

undefined 20.08.2015 11:07

В общем случае задачу решает ТРО(Теорема о разделяющих осях)Она дает вектор наикротчайшего выхода одного тела из другого.В инете был супер годный мануал по ней на примере игры N но похоже его выпилили.Очень жаль.Может у кого-нибудь бэкап сохранился? Такие статьи нельзя терять

samana 20.08.2015 12:03

Может эта статья вам поможет http://www.flasher.ru/forum/blog.php?b=182

nubideus 20.08.2015 12:12

Цитата:

Сообщение от undefined (Сообщение 1185885)
В общем случае задачу решает ТРО(Теорема о разделяющих осях)Она дает вектор наикротчайшего выхода одного тела из другого.В инете был супер годный мануал по ней на примере игры N но похоже его выпилили.Очень жаль.Может у кого-нибудь бэкап сохранился? Такие статьи нельзя терять

это был всего лишь перевод. http://www.metanetsoftware.com/technique/tutorialA.html
http://www.dyn4j.org/2010/01/sat/

тро не делает того, что нужно тсу.

Marlin 20.08.2015 12:14

Цитата:

Сообщение от samana (Сообщение 1185890)
Может эта статья вам поможет http://www.flasher.ru/forum/blog.php?b=182

в этом примере, они выталкивают шар - вдоль нормали, у меня это О2B , и если вытолкнуть на величину проникновения, то получается небольшая погрешность, которая во многих приложениях не так уж важна, то есть шар окажется не в той позиции откуда он прилетел, а немного смещен, мне важно чтобы он вернулся именно в ту позицию откуда прилетел (O2).

undefined 20.08.2015 12:29

Цитата:

это был всего лишь перевод.
Спасибо, схоронил
Цитата:

тро не делает того, что нужно тсу.
Цитата:

нужно СМЕСТИТЬ его обратно (по направлению противоположному вектору движения) на такое расстояние чтобы была одна точка соприкосновения со стеной, и уже потом менять вектор движения как угол падения = углу отражения.
Как раз задача для ТРО.
Или не устраивает,что вектор наикротчайшего выхода(ВНВ) не всегда будет колинеарен направлению движения?Тогда можно считать проекцию ВНВ на скорость и двигать шар на полученный результат.Хотя если шар не слишком быстро носится ВНВ будет почти параллелен скорости.

Marlin 20.08.2015 12:44

Цитата:

Сообщение от undefined (Сообщение 1185893)

Или не устраивает,что вектор наикротчайшего выхода(ВНВ) не всегда будет колинеарен направлению движения?Тогда можно считать проекцию ВНВ на скорость

проекция ВНВ не будет равна длине О1О2

Цитата:

Сообщение от undefined (Сообщение 1185893)
Хотя если шар не слишком быстро носится ВНВ будет ПОЧТИ параллелен скорости.

шар носится не быстро, но много ударяется, и нужно чтобы он после множества ударов двигался без погрешности. А это ПОЧТИ - накопление погрешности.

undefined 20.08.2015 13:04

Цитата:

проекция ВНВ не будет равна длине О1О2
Почему же не будет? На твоем рисунке ВНВ - это отрезок BD. Спроецировав его на вектор V,как раз получим вектор против направления движения, выводящий шар из положения O2 так, что будет ровно 1 точка касания т.е. в положение O1

nubideus 20.08.2015 13:04

Цитата:

Как раз задача для ТРО.
смотрим задачу:
Цитата:

нужно СМЕСТИТЬ его обратно (по направлению противоположному вектору движения)
тро дает вектор минимального перехода, а в задаче нужен совсем другой вектор.

в программе шаг допустим равен 16мсек, за эти 16мс шар встревает в стену. нужно найти когда именно шар касается стены.
допустим это было на 6мсекунде, отменяем бракованные 16мсекундные изменения и применяем 6мсекундные, а потом еще и 10мсекундные, вот и все

neonoviiwolf 20.08.2015 13:05

ну так используйте box2d или nape, там такое довольно легко построить

Добавлено через 3 минуты
ну а так, нужно просчитывать траекторию на кадр вперёд, у нас же есть вектор направления движения, если в следующем кадре будет столкновение, находим точку касания и и просто в след кадре ставим шарв эту точку, при этом чем выше частота кадров, тем меньше погрешность

Marlin 20.08.2015 13:10

вот его -то длину мне и нужно найти, он параллелен вектору V, я у уже близок к решению, вычисляю угол DBA, через него хочу найти

undefined 20.08.2015 13:12

Цитата:

тро дает вектор минимального перехода, а в задаче нужен совсем другой вектор.
да, я понял

Цитата:

Тогда можно считать проекцию ВНВ на скорость и двигать шар на полученный результат.

neonoviiwolf 20.08.2015 13:13

так же потом можно вычислить время, через которое будет столкновение, отнять от времени, которое длиться один кадр, посчитать на какое расстояние шар должен пройти после столкновения за время кадра и прибавить этот расстояние к следующему кадру, где уже шар отскакивает. С точки зрения математики должно быть хорошо

Marlin 20.08.2015 13:31

Цитата:

Сообщение от undefined (Сообщение 1185895)
На твоем рисунке ВНВ - это отрезок BD.

ВНВ насколько я понимаю - перпендикуляр к стене, на моем рисунке это AB

Добавлено через 47 секунд
Цитата:

Сообщение от neonoviiwolf (Сообщение 1185897)
Добавлено через 3 минуты
нужно просчитывать траекторию на кадр вперёд, у нас же есть вектор направления движения, если в следующем кадре будет столкновение, находим точку касания и и просто в след кадре ставим шарв эту точку, при этом чем выше частота кадров, тем меньше погрешность

да, так наверное будет проще, попробую

undefined 20.08.2015 13:38

Цитата:

ВНВ насколько я понимаю - перпендикуляр к стене, на моем рисунке это AB
Неверно.ВНВ зависит от положения шара и его глубины проникновения в препятствие и геометрически равен минимальному вектору, на который надо сместить шар, чтоб он перестал пересекаться со стеной т.е. как раз на вектор BD

Marlin 20.08.2015 13:50

Цитата:

Сообщение от undefined (Сообщение 1185904)
Неверно.ВНВ зависит от положения шара и его глубины проникновения в препятствие и геометрически равен минимальному вектору, на который надо сместить шар, чтоб он перестал пересекаться со стеной т.е. как раз на вектор BD

DBA - прямоугольный треугольник, где BD - гипотенуза, а прямой угол - А, соответственно вектор BA будет явно короче.

neonoviiwolf 20.08.2015 13:51

вот, нашёл серию интересных уроков, которую сам смотрел в начале, у них есть урок как сделать то, что вы хотите

undefined 20.08.2015 14:00

Цитата:

DBA - прямоугольный треугольник, где BD - гипотенуза, а прямой угол - А, соответственно вектор BA будет явно короче.
Короче чем что? Еще раз, я утверждаю, что искомое смещение будет равно проекции вектора BD на вектор V. Этот вектор будет противонаправлен вектору V и будет выводить шар из стенки как раз чтобы была одна точка касания.

Добавлено через 1 минуту
Вообще не понял какое отношение BA имеет к проблеме

Marlin 20.08.2015 14:05

Цитата:

Сообщение от undefined (Сообщение 1185907)
Короче чем что? Еще раз, я утверждаю, что искомое смещение будет равно проекции вектора BD на вектор V. Этот вектор будет противонаправлен вектору V и будет выводить шар из стенки как раз чтобы была одна точка касания.

Добавлено через 1 минуту
Вообще не понял какое отношение BA имеет к проблеме

помогите его найти

nubideus 21.08.2015 10:07

Вложений: 1
я думал вы вчера еще решили
http://www.fxyz.ru/формулы_по_геомет..._треугольника/

Вложение 31765
(убогие онлайн рисовалки ненависть)
зная три угла и один катет прямоугольного треугольника найти гипотенузу

Marlin 21.08.2015 11:14

да, вчера решил, спасибо за ссылки)


Часовой пояс GMT +4, время: 03:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.