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

Физика «на пальцах»: Обнаружение столкновений для выпуклых геометрий (комментарии) (6 стр)

Страницы: 1 2 3 4 5 6
#75
22:14, 14 дек. 2013

Machito
> Таких плоскостей ведь бесконечное множество.
можно взять любую. мы переходим в двумерную систему координат, связанную с некоторой плоскостью, перпендикулярной axis.

Machito
> Вы говорите, что эта операция называется 2d clipping и что в четвёртой фазе нам
> надо перевести всё обратно в 3 измерения.
верно. на самом деле нас не особо интересуют сами точки пересечения двумерных рёбер и конкретные координаты вершин в двумерной системе координат. нас интересует то, какие именно рёбра пересекаюся и какие именно вершины попадают в контактную площадку, чтобы потом уже в 3д найти расстояние между трёхмерными рёбрами и расстояние от вершин до соответствующих 3д плоскостей.

Machito
> 1)Повернуть плоскость(вместе с точками), так чтобы она была ортогональна к
> одной из осей координат, а затем эту координату просто обрезать.
> 2)Решать двумерную задачу.
> 3)Вернуть 3-е измерение и повернуть плоскость в прежнее положение.
смотря как поворачивать. если поворачивать, используя тригонометрию, то обязательно получатся вырожденные случаи. если поворачивать, используя переход в систему координат через линейное преобразование, то я это и имел в виду.

> Правильно ли понимаю: 1-ая вспомогательная плоскость строится по "средней арифметической" точке 1-ой площадки и по вектору penetration depth? Вторая по второй и тому же(?) вектору - меня смутила фраза "практически* совпадает с направлением penetration depth".
Нет, ты понимаешь неверно. Прочитай, что написано под звёздочкой:
Поэтому при проецировании точек одной контактной площадки на другую я бы советовал у каждой контактной площадки найти центр и усреднённую нормаль и проецирование точек вести именно на эти усреднённые плоскости.
Если брать у обеих вспомогательных плоскостей нормаль, совпадающую с axis, алгоритм будет заметно врать.

> Вот здесь я совсем запутался. Что мы проецируем со второй вспомогательной на первую, если мы их только построили, а наши точки пока ещё находятся на плоскости из 3-ей фазы. ("двумерная площадка пересечения")
Напомню, что из третьей фазы нас интересует то, какие именно вершины и какие пары рёбер участвуют в клиппинге. И вот на этом этапе мы их и проецируем(трёхмерно) на соответствующую контактную площадку.

Прошло более 5 лет
#76
4:57, 22 янв. 2019

Suslik, а нету случайно исходников для этого алгоритма? Как раз то что мне нужно.

#77
5:26, 22 янв. 2019

MikeNew
нет, я не ставил себе целью распространять реализацию этого алгоритма. я ставил себе целью научить желающих, как его релаилизовать.

#78
7:04, 22 янв. 2019

Suslik, понял, по принципу - "если хочешь накормить голодного не давай ему рыбу, дай ему удочку" :)
Можно тогда у вас спросить про разделяющую ось? К примеру, самый простой случай на рисунке, прямоугольник и отрезок, в данном случае разделяющая ось с минимальным проникновением - нормаль к отрезку (зеленый вектор), и если я хочу убрать пересечение то могу просто сдвинуть квадрат на глубину проникновения по зеленому вектору. С этим все ясно. А если я хочу развести в определенном направлении (по произвольной оси), например строго по оси Y (красный вектор (0,1,0))? Могу я это сделать используя только SAT?
То есть, обобщенно говоря, интересует вычисление минимального проникновения по произвольной разделяющей оси (а не по тем, которые нормали к граням или векторные произведения ребер), как такое делают? Пример где это может понадобится - OBB проник в ландшафт и его нужно вытолкнуть наружу строго вверх (0,1,0), а разделяющие оси не обязательно будут иметь такое направление. Очень интересно как такое реализуют.

Изображение
#79
7:30, 22 янв. 2019

MikeNew
в общем случае вектор, который ты ищешь, называется directional penetration distance(название я сам только что придумал) и чтобы его найти, нужно найти пересечение разницы Минковского твоих двух геометрий с осью, вдоль которой ты их расталкиваешь. дисклеймер — это не является стандартной задачей, так как таким образом никто коллижены с ландшафтом не делает и поэтому стандартного решения у неё нет.

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

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

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