Eyeshot PolyRegion2D. Юнион с допуском - PullRequest
1 голос
/ 23 октября 2019

Я хотел бы соединить два многоугольника, которые почти касаются. Проблема в том, что используемая библиотека не позволяет указывать допуск.

Метод, который я пытался использовать, - PolyRegion2D.Union. Результат, который я хотел бы получить, должен быть одним PolyRegion2D, вместо этого не выполняется объединение.

Это то, что я пытался:

Polygon2D pa = new Polygon2D(new Point2D[] {
    new Point2D(1.15938971595503,-0.199967078272286),
    new Point2D(1.52634922341708,-0.420128484528485),
    new Point2D(1.70641430562392,-0.120000722926738),
    new Point2D(1.17299051700752,0.200032892324767),
    new Point2D(0.561190378505281,0.200032892324767),
    new Point2D(0.561190378505281,-0.199967078272286),
    new Point2D(1.15938971595503,-0.199967078272286)
});
PolyRegion2D a = new PolyRegion2D(new Polygon2D[] { pa });

Polygon2D pb = new Polygon2D(new Point2D[] {
    new Point2D(2.15660570919657,-0.39009846249557),
    new Point2D(1.70641430562392,-0.120000887257862),
    new Point2D(1.52634925853194,-0.420128484528485),
    new Point2D(1.97654066210459,-0.690226059766193),
    new Point2D(2.15660570919657,-0.39009846249557)
});
PolyRegion2D b = new PolyRegion2D(new Polygon2D[] { pb });

PolyRegion2D[] ab = PolyRegion2D.Union(a, b);

Assert.AreEqual(1, ab.Length);

Я также пытался преобразовать PolyRegion2D s до Region, определяя различные отклонения в методе Regen, но я получаю тот же результат.

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

1 Ответ

2 голосов
/ 23 октября 2019

Ваш вывод на Regen должен влиять только на кривые, если я не ошибаюсь, поэтому в вашем случае это не должно влиять, так как вы используете острые линии.

Смещение - это путь к объединению геометрии.

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

...