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

Пересечение линия-линия

#0
11:29, 31 авг 2009

Привет!
Я пытаюсь написать простенький 2D физ движок для игры. Литературу прочитал, половину даже понял. Но вот что интересно - большинство существующих движков находят пересечения объектов тогда, когда они уже состоялись - т.е. если, скажем, вершина находится внутри другой фигуры, то произошло пересечение. Меня же заинтересовала возможность найти пересечение, которое еще не произошло, но произойдет в текущем промежутке времени. Это очень просто сделать с окружностями, с "квадратами", движущимися без вращения, с "квадратами", вращающимися, но не движущимися. Но вот вариант, например, когда одна линия неподвижна, а другая движется и вращается, меня реально поставил в тупик...

#1
11:49, 31 авг 2009

я делал такой коллижен в 3д.
траекторию по вращению разбивал на более-менее прямолинейные участки. вроде один полный поворот на 8 частей. а уже между двумя положениями - трассировал геометрически. ну и оптимизировал для очень высоких скоростей вращения. больше 10 вращений в секунду просто срезал, всё равно пользователь не заметит).
потом перешел к схеме без абсолютно плоских объектов, коллижен через объем проникновения одного объекта в другой.

#2
12:15, 31 авг 2009

Получается, трассировали от вершины одной части до вершины соседней, и если луч не пересекался, то продолжали трассировку от последней части до следующей. Я правильно понял? Но ведь тогда тоже получается не точная координата, а приближенная...

#3
13:16, 31 авг 2009

> Но ведь тогда тоже получается не точная координата, а приближенная...

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

#4
13:20, 31 авг 2009

> Я правильно понял?

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

#5
13:42, 31 авг 2009

2 Волгоградец

Здесь есть хорошая статья http://www.gamedev.ru/code/articles/?id=4249 + в комментариях можно найти много инфы и ссылок.

#6
13:52, 31 авг 2009

aloha_hawaii, спасибо.
V@NGER, спасибо, я уже изучил это, но опять же, это не покрывает мой вопрос - мне нужно узнать точную координату до того, как объекты пересекутся. Я уверен, что это несложно сделать, если я знаю скорости и размеры всех объектов.

#7
14:07, 31 авг 2009

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

#8
14:14, 31 авг 2009

Волгоградец
И все же, тебе для игровой ситуации или нужно полное моделирование физ. процесса?

Если первое, то здесь можно использовать просто метод выталкивания одной фигуры из другой, метод позволяет обнаружить и правильно обработать даже те случаи, когда один объект "пролетел" сквозь другой за время dt.
Где-то в коментах к той статье есть ссылки на исходники.

В любом случае у тебя есть две позиции объекта:
1 - когда объект еще не столкнулся с другим (t) и 2 - когда объект уже столкнулся при следующей проверке (t+dt) где dt - время прошедшее с момента последнего update.
Тогда просто выталкиваем объекты  друг из друга (т.е. разводим в противополжные стороны их траектории движения, при этом вращения игнорируются). Здесь можно найти и момент столкновения (t0) , т.е t + t0, t0 <= dt и за доли времени до столкновения, вообще любое интересующее тебя положение тел.

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

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