Cela semble non-trivial (il est demandé beaucoup sur divers forums), mais j'ai absolument besoin de cela comme un bloc de construction pour un algorithme plus complexe.Comment couper deux polygones?
Entrée: 2 polygones (A et B) en 2D, donnés sous la forme d'une liste d'arêtes [(x0, y0, x1, y2), ...]
chacun. Les points sont représentés par des paires de double
s. Je ne sais pas s'ils sont donnés dans le sens des aiguilles d'une montre, dans le sens inverse des aiguilles d'une montre ou dans n'importe quelle direction. I do sachez qu'ils ne sont pas nécessairement convexes.
Sortie: 3 polygones représentant A, B et le polygone d'intersection AB. L'un ou l'autre peut être un polygone vide (?), Par ex. null
.
Conseil pour l'optimisation: Ces polygones représentent les limites de la pièce et du plancher. Donc, la limite de la pièce se croisera normalement complètement avec la limite du plancher, sauf si elle appartient à un autre étage sur le même plan (argh!). Je souhaite que quelqu'un ait déjà fait cela en C# et me laisse utiliser leur stratégie/code, car ce que j'ai trouvé jusqu'ici sur ce problème est plutôt intimidant.
EDIT: Donc, il semble que je ne suis pas entièrement poulet pour feiling faible à la perspective de le faire. Je reprends ici la sortie désirée, car cela est un cas particulier et peut rendre le calcul plus simple:
Sortie: polygone d'abord moins tous les bits qui se croisent, des polygones d'intersection (au pluriel est ok). Je ne m'intéresse pas vraiment au deuxième polygone, juste son intersection avec le premier.
EDIT2: J'utilise actuellement la bibliothèque GPC (General Polygon Clipper) qui rend cela vraiment facile!
Ceci est plus compliqué que vous ne le pensez. Comment envisagez-vous de représenter la forme qui en résulte? Gardez à l'esprit que les deux entrées pourraient (a) ne pas se croiser du tout, (b) se croiser partiellement, aboutir à une forme fermée convexe ou concave, (c) se croiser complètement, résultant en une forme avec deux frontières (beignet) où vous devez trouver un moyen de représenter l'intérieur et l'extérieur de la forme. –
En effet, Jon a raison. Votre problème n'est pas bien énoncé. l'ensemble résultant * pourrait ne pas être un polygone *, et donc la sortie de la fonction ne devrait pas être un polygone. Que voulez-vous faire dans le cas où la forme résultante n'est pas connectée? Imaginez par exemple un poly C en intersection avec un poly formé en I, résultant en un colon. –
merci, devra réfléchir à ce sujet et trouver une solution. N'a pas pensé de cette façon avant ... –