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

Помогите написать физический движок :) (26 стр)

Страницы: 125 26 27 2835 Следующая »
#375
14:10, 4 окт. 2018

}:+()___ [Smile]
локальный минимум в случае с малыми пересечениями всегда будет совпадать с глобальным, если в качестве начального приближения взять разницу двух точек, гарантированно лежащих внутри геометрий. а в случае с большими пересечениями всё равно. все алгоритмы вроде minkowsky portal refinement ищут локальный минимум и основная проблема не в этом. основная проблема обычно в численных неустойчивостях в неудобных случаях.

vindast
> gjk-epa (я чуть-чуть про него почитал) начинается с симплекса, которым
> закончился gjk, и должен вернуть область пересечения - контактную площадку.
почитай ещё


#376
14:16, 4 окт. 2018

Suslik
> почитай ещё
Если есть годная статья на тему, то буду благодарен, если скинете. Я вот нашел это:
http://www.dyn4j.org/2010/05/epa-expanding-polytope-algorithm/#epa-top
Там как раз пишут про то, что нужен симплекс с которым gjk закончился. (Там двумерный случай).

#377
14:21, 4 окт. 2018

gjk-epa возвращает не контактную площадку, а minimal translation distance

#378
15:48, 4 окт. 2018

Suslik
А как генерить контактную площадку?

Чем дальше в лес тем больше дров. Подзадача с минимальной выпуклой оболочкой - отдельная песня. Много алгоритмов, какой выбрать не ясно.
#379
(Правка: 15:57) 15:56, 4 окт. 2018

vindast
> А как генерить контактную площадку?
ты, наверное, даже ещё не представляешь, какая это эпопея

я делаю так: https://gamedev.ru/code/articles/convex_collisions

#380
(Правка: 16:14) 16:10, 4 окт. 2018

Suslik, я читал ту статью, там 2d clipping самая сложная часть, ничего кроме как попарно проверять ребра на пересечение и проверять каждую точку каждого н-угольника на попадание во второй не придумал.

Я похоже совсем запутался. gjk последняя в нем ближняя к нулю точка (v(i + 1) у Вас) это и есть ось проникновения. Да?

И Ваша версия gjk сильно отличается от всего, что я наблюдал.

#381
16:32, 4 окт. 2018

vindast
> Suslik, я читал ту статью, там 2d clipping самая сложная часть, ничего кроме
> как попарно проверять ребра на пересечение и проверять каждую точку каждого
> н-угольника на попадание во второй не придумал.
каждый н-угольник можно считать выпуклым. поэтому пересечение их можно найти за O(n). к тому же n — параметр алгоритма и сложности исходной геометрии не зависит.

vindast
> jk последняя в нем ближняя к нулю точка (v(i + 1) у Вас) это и есть ось
> проникновения. Да?
gjk вообще оси проникновения не умеет искать, так как не работает для пересекающихся геометрий. он ищет разделяющую ось. sgjk ищет ось проникновения.

#382
17:22, 4 окт. 2018

vindast
Вот тут чувак очень хорошо объясняет принцип GJK - https://www.youtube.com/watch?v=Qupqu1xe7Io

#383
(Правка: 19:00) 18:52, 4 окт. 2018

nullptr, я это видео сегодня смотреть начал как раз.
Там есть непонятные моменты (ввиду плохого знания английского).
В пункте, где он рассматривает отрезок AB, есть условие If AB, он имеет в виду что dot(B - A, origin - A) > 0.0?
А в пункте где, рассматривается треугольник, есть if(ABC x AC) имеется в виду что ABC это нормаль треугольника?
И соответственно dot(cross(normalABC, C - A), origin - A)  > 0.0?

#384
20:05, 4 окт. 2018

vindast

В пункте, где он рассматривает отрезок AB, есть условие If AB, он имеет в виду что dot(B - A, origin - A) > 0.0?

Да, If AB это проверка, в том же ли направлении вектор АВ, что и вектор на начало координат. Он об этом и начинает рассказывать на 23:35.
А в пункте где, рассматривается треугольник, есть if(ABC x AC) имеется в виду что ABC это нормаль треугольника?
И соответственно dot(cross(normalABC, C - A), origin - A)  > 0.0?

Да.

Там у видоса субтитры есть..

#385
23:24, 4 окт. 2018

nullptr, есть еще вопрос. А что делать когда получается тетраэдр? На сколько я понял, он будет конечным симплексом.
Нужно лишь проверить принадлежит ему начало координат и все?

#386
0:30, 5 окт. 2018

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

#387
0:47, 5 окт. 2018

Заряжу сразу еще пачку вопросов.

Получается что будет в тетраэдре новая вершина А, и соответственно три старые B, C, D. По логике есть шесть потенциальных направлений поиска.
Нормали треугольников ABC, ACD, ADB и нормали к ребрам AB, AC, AD? Правильно рассуждаю? Есть подозрение что вершину D можно отбросить. Или нет? (симплекс становится треугольником для первого и отрезком для второго случая).

Принадлежность нуля симплексу нужно искать только для тетраэдра или и для треугольника и для отрезка? ( то есть для всего)

#388
1:49, 5 окт. 2018

>Есть подозрение что вершину D можно отбросить.
Почему? Насколько я понимаю, нам не нужно искать ниже основания тетраэдра и выше его вершины в точке А.
Если ноль лежит на отрезке или на треугольнике, то вроде как получается, что геометрии не пересекаются, а лишь касаются друг друга.. хотя не уверен..

+ Показать

#389
4:02, 5 окт. 2018

>Если ноль лежит на отрезке или на треугольнике, то вроде как получается, что геометрии не пересекаются, а лишь касаются друг друга.. хотя не уверен..
Не, что-то я какую-то чушь написал..
Это если одна из опорных точек лежит в нуле, то значит геометрии касаются..
Если ноль лежит на отрезке, то получается, что нам нужно кросс продукт брать не с вектором АО, а с каким-то другим, чтобы нормаль получить.. Но в таком случае получается, если мы построим треугольник, то опять таки ноль будет и отрезку принадлежать и треугольнику.. если дальше от треугольника строить тетраэдр (в какую сторону?), то получается, что ноль будет на поверхности тетраэдра - значит есть пересечение!?.. если брать ребро от треугольника, то дальше тоже самое получается..

Страницы: 125 26 27 2835 Следующая »
ПрограммированиеФорумФизика