Como cruzar dois polígonos?

Isso parece não-trivial (ele é perguntado bastante em vários fóruns), mas eu absolutamente preciso disso como um bloco de construção para um algoritmo mais complexo.

Entrada: 2 polígonos (A e B) em 2D, dados como uma lista de arestas[(x0, y0, x1, y2), ...] cada. Os pontos são representados por pares dedoubles. Eu não sei se eles são dados no sentido horário, anti-horário ou em qualquer direção. EuFaz saiba que eles não são necessariamente convexos.

Saída: 3 polígonos representando A, B e o polígono de interseção AB. Qualquer um dos quais pode ser um polígono vazio (?), E.null.

Sugestão para otimização: Esses polígonos representam os limites da sala e do piso. Assim, o limite da sala normalmente se cruzará totalmente com o limite do piso, a menos que ele pertença a outro andar no mesmo plano (argh!).

Eu meio que espero que alguém já tenha feito isso em c # e me deixe usar sua estratégia / código, já que o que eu encontrei até agora sobre este problema é bastante assustador.

EDITAR: Então parece que eu não sou completamente louco por fingir desmaiar com a perspectiva de fazer isso. Eu gostaria de reafirmar a saída desejada aqui, pois esse é um caso especial e pode tornar a computação mais simples:

Saída: Primeiro polígono menos todos os bits de interseção, polígonos de interseção (plural é ok). Eu não estou realmente interessado no segundo polígono, apenas na sua interseção com o primeiro.

EDIT2: Atualmente estou usando oGPC (Clipper Geral de Polígono) biblioteca que torna isso realmente fácil!

questionAnswers(9)

yourAnswerToTheQuestion