Большинство людей предложили в этой цепочке «взять все точки / ребра одного многоугольника и сравнить с каждой точкой / ребрами другого». Это, вероятно, сработает нормально, если все, что вы сделаете, это сравните два довольно простых многоугольника, и если вы не слишком озабочены тем, чтобы сделать это быстро.
Однако, если вам нужен довольно простой и лучший способ. Используйте, как предлагает Бен Фойгт, метод квадратичной оптимизации (например, квадратичное программирование). По сути, ваши многоугольники - это ваш набор линейных ограничений, т.е. ваша точка решения должна лежать на внутренней стороне каждого края вашего многоугольника (это ограничение неравенства). И ваша функция затрат для оптимизации - это просто евклидово расстояние, то есть Q в стандартной формулировке - это просто единичная матрица. После того, как эта проблема была представлена как такая проблема, вы можете либо использовать библиотеку, которая решает эту проблему (их много), либо вы можете изучить ее из книги и накатать свой собственный код для нее (это довольно простой алгоритм для кодирования ).
Если вам нужен реальный метод для этого, например, если этот простой тест от многоугольника к многоугольнику является первым шагом к более сложным трехмерным формам (например, твердому телу из многоугольников). Тогда вам, скорее всего, следует просто использовать пакет, который уже делает это. Здесь представлен набор библиотек обнаружения столкновений, многие из которых определяют глубину проникновения. или, что то же самое, минимальное расстояние.
person
Mikael Persson
schedule
25.02.2011