Полигоны и площадь Java

Итак, у меня есть несколько многоугольников (обведенных белым на изображении).

В попытке сложить все многоугольники вместе, чтобы получить один многоугольник, который является их внешней границей, я преобразовал каждый многоугольник (класс java) в область (класс java), а затем добавил области вместе с add (Area a), предоставляемый классом Area.

Оттуда я преобразовал область обратно в многоугольник и нарисовал его как заполненный многоугольник (фиолетовая область на изображении).

Однако это не то, чего я ожидал. Может ли кто-нибудь придумать, где я могу сделать это правильно, или хотя бы просто добавить область треугольника к моему многоугольнику?

Когда я просто рисую все отдельные многоугольники с заливкой, я получаю то, что хочу (нарисованное), но мне нужно его представление в виде многоугольника.

Чего я хочу


person user1135469    schedule 05.09.2012    source источник
comment
Может быть, вы дальтоник? Мне это не кажется фиолетовым! Кроме того, если это не то, чего вы ожидали, чего были вы ожидали?   -  person cheeken    schedule 05.09.2012
comment
Я не ожидал того, что появляется на первом (верхнем) изображении. Я ожидал второго изображения (нижнего, без треугольного промежутка посередине, который появляется в верхнем).   -  person user1135469    schedule 05.09.2012
comment
Чтобы быстрее получить более качественную помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 05.09.2012
comment
Это может быть неприятная проблема ... к сожалению, это все, что я могу сказать: P   -  person MadProgrammer    schedule 05.09.2012
comment
Что произойдет, если вы заполните добавленную область? (перед преобразованием обратно в многоугольник)   -  person lbalazscs    schedule 05.09.2012


Ответы (1)


Я могу порекомендовать использовать JTS. Просто создайте свою геометрию, которую хотите объединить, и используйте union. После этого вы можете использовать новую геометрию и раскрасить ее, используя предыдущий код. Пример простого кода для объединения:

// build polygon p1
Polygon p1 = new GeometryFactory().createPolygon(new Coordinate[]{new Coordinate(0,0), new Coordinate(0,10), new Coordinate(10,10), new Coordinate(10,0), new Coordinate(0,0)});
// build polygon p2
Polygon p2 = new GeometryFactory().createPolygon(new Coordinate[]{new Coordinate(0,0), new Coordinate(0,30), new Coordinate(5,30), new Coordinate(5,0), new Coordinate(0,0)});
// calculate polygon3 as the union of p1 and p2
Polygon p3 = (Polygon) p1.union(p2);
// print simple WKT
System.out.println(p3.toText());

Результат в этом случае (как и ожидалось):

POLYGON ((0 0, 0 10, 0 30, 5 30, 5 10, 10 10, 10 0, 5 0, 0 0))
person Lars    schedule 11.07.2016