Как стать автором
Обновить

Комментарии 14

Спасибо за статью!
Однако, мне немного грустно от обилия статей про GJK, которые все про 2D и все заканчиваются на моменте определения есть коллизия или нет. Для этого можно и SAT'ом обойтись.


Как же все-таки получить расстояние между объектами, нигде толком не объясняется (точнее, мне не попадалось).

var distance = Math.Sqrt(Math.Pow(x1 — x2, 2) + Math.Pow(y1 — y2, 2));
Где
x1, y1 — координаты объекта A,
x2, y2 — координаты объекта B.

Это скалярная величина. А если нужна векторная, то все на много проще,
var distanceX = Math.Abs(x1 — x2);
var distanceY = Math.Abs(y1 — y2);

Ну или можешь без модулей, как тебе больше подойдет.
А если имелось ввиду
имеется ввиду отрезок наименьшей длины, один конец которого принадлежит фигуре А, а другой фигуре Б

То можно просто все вершины перебирать объекта А и Б замеряя расстояние между ними, выбирая самое наименьшее — самый простой вариант

Ну, расстояние между центрами-то легко найти. А вот минимальное расстояние, особенно с учетом того, что фигуры могут пересекаться и погружаться друг в друга — это уже веселее.


Сейчас уже ночь, но по-моему минимальное расстояние — не обязательно расстояние между вершинами; надо еще нормали к ребрам строить. Не?

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

Если фигуры пересеклись, то нас может интересовать "глубина погружения".


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

Вот я все пытаюсь понять, облегчает ли GJK как-то эту задачу или нет.

тогда нужно искать наибольшее расстояние внутри получившейся фигуры пересечения
Под «расстоянием» имеется ввиду отрезок наименьшей длины, один конец которого принадлежит фигуре А, а другой фигуре Б?

Да.

Начав читать статью, наткнулся на какие то термины, которые никак не обьясняются. Задача стоит, как я понял, найти пересечение двух полигонов. Что такое проверяемое направление?
А сравнивали подход с типичными реализациями пересечений? Геометрическое пересечение всех ребер и проверка, что точки внутри выпуклого многогранника?
Тяжело интуитивно представлять такие вещи, но с виду для простых фигур (трех-четырехугольников) там банально меньше операций получится.

По-моему куда проще сравнить все линии обоих фигур на пересечение друг с другом

БЛАГОДАРЮ! Так совпало, что именно сегодня заинтересовался этим. +1 статья по этому поводу в копилочку.
ЗАДАЧА ПРО МАТЕМАТИКУ
@
ИСПОЛЬЗОВАТЬ НАДСТРОЙКУ НАД JS

P.S. это постирония
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории