Войти
ПрограммированиеФорумФизика

Проблема при поиске правильного выталкивающего вектора (2 стр)

Страницы: 1 2
#15
12:28, 21 ноя 2014

MANAB
Прежде чем отскакивать, нужно правильно вывести объект из коллизии, т.е. сделать так, чтобы эти объекты не пересекались. Это не значит что объект нужно выкинуть абы куда. Это значит что нужно вывести его к тому месту где объекты соприкасались бы но не пересекались. Именно это называется разрешением коллизии. Представьте себе, что объект соскальзывает по стене вниз, а вы, при таком раскладе собираетесь запузырить его куда-то наверх. Да, конечно, я смогу найти общую нормаль соударения и спроецировать на нее текущий вектор скорости, чтобы получить новый вектор скорости, но выталкивать объект из столкновения таким образом полная бессмыслица да и вообще какой-то физический каламбур.

#16
12:49, 21 ноя 2014

Fennec
>
> Fennec
Теорема о разделяющих осях никак не учитывает направление скорости движения. Она выталкивает в соответствии с тем, насколько один объект вошел  в другой. Положение    объекта на вашей самой первой картинке внутри объектов A и B могло оказаться таковым при практически любом векторе скорости, т.е. горизонтальная составляющая вектора скорости просто должна быть направлена вправо, а вертикальная может быть почти любой и в любую сторону. Т.е. используя выталкивание по теореме о разделяющих осях правильную точку соприкосновения вычислить не получится, объект просто выводится из столкновения в ближайшем направлении. Может легко получится так (из-за дельты времени и начального положения), что  объект окажется ближе не к левой стороне A и B, а к правой, и выталкивать нужно будет и дальше вправо.
Если нужна правильная точка столконовения - вычисляйте точку пересечения двух прямых. Если нужно просто вывести объект из коллизии по ТРО, а точность не очень важна - сейчас у вас итак все правильно выводится.

#17
12:49, 21 ноя 2014

В общем, покуда я нашел решение которое меня устраивает, хочу написать здесь о нем. Идея в чем-то совпадает с решением предложенным товарищем Suslik. Состоит она в том, чтобы удалить для объектов внутренние грани, что можно сделать при генерации карты. Учитывая то, что объекты "стенок" могут быть разной формы, потребуется некоторая информация о том какие грани сплошные, а какие нет. Сплошные, при при соприкосновении можно выкинуть, не сплошные необходимо оставить.

#18
12:59, 21 ноя 2014

MANAB
Описанную вами проблему решает мультисэмплинг, все так же используя ТРО.

#19
13:03, 21 ноя 2014

Согласен. Это был просто пример, для того чтобы объяснить, что вектор выталкивания никак не зависит от направления скорости объекта  и правильную точку соприкосновения по ТРО вычислить не получится, только приближенную.

Страницы: 1 2
ПрограммированиеФорумФизика

Тема в архиве.