Это кажется нетривиальным (об этом довольно часто спрашивают на различных форумах), но мне это абсолютно необходимо как строительный блок для более сложного алгоритма.
Входные данные: 2 многоугольника (A и B) в 2D, представленных в виде списка ребер [(x0, y0, x1, y2), ...]
каждый. Точки представлены парами double
. Я не знаю, даются ли они по часовой стрелке, против часовой стрелки или вообще в любом направлении. Я действительно знаю, что они не обязательно должны быть выпуклыми.
Выходные данные: 3 многоугольника, представляющие A, B и пересекающийся многоугольник AB. Любой из них может быть пустым (?) Многоугольником, например null
.
Совет по оптимизации: эти многоугольники представляют границы помещения и этажа. Таким образом, граница комнаты обычно полностью пересекается с границей пола, если только она не принадлежит другому этажу в той же плоскости (ах!).
Я как бы надеюсь, что кто-то уже сделал это на C # и позволит мне использовать их стратегию / код, так как то, что я обнаружил до сих пор по этой проблеме, довольно устрашающе.
РЕДАКТИРОВАТЬ. Кажется, я не совсем настроен терять сознание при мысли о том, что это сделаю. Я хотел бы повторить здесь желаемый результат, так как это особый случай, который может упростить вычисления:
Вывод: первый многоугольник за вычетом всех пересекающихся битов, многоугольники пересечения (множественное число можно). Меня не особо интересует второй многоугольник, просто его пересечение с первым.
EDIT2: в настоящее время я использую GPC (General Polygon Clipper ), которая упрощает эту задачу!