Форум 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


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

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