Je ne sais pas quelle langue utilisez-vous? J'ai une bibliothèque, écrite pour mes besoins, qui peut obtenir une partition complète par un ensemble de lignes donné et renvoyer des polygones en conséquence. Il est écrit sur PHP et appelé dimension et, en l'utilisant, vous pouvez résoudre votre question comme moyen:
- Définir votre polygone par un ensemble de lignes LineSet_2D ou Polygon_2D
- Définir des lignes de séparation aussi par Line_2D
- Utilisez la méthode LineSet_2D getPolygons pour trouver tous les polygones
J'ai écrit un exemple:
//define or polygon. Note that Polygon_2D can also be used
$rPolygon = new LineSet_2D(
new Line_2D(0, 3, 1, 1),
new Line_2D(1, 1, 3, 0),
new Line_2D(3, 0, 1,-1),
new Line_2D(1,-1, 0,-3),
new Line_2D(0,-3,-1,-1),
new Line_2D(-1,-1,-3,0),
new Line_2D(-3, 0,-1, 1),
new Line_2D(-1, 1, 0, 3)
);
//define partition line set
$rPartition = new LineSet_2D(
new Line_2D(-1, 1, 1,-1),
new Line_2D(-1,-1, 1, 1)
);
//result line set:
$rResultSet = LineSet_2D::createFromArray(array_merge(
$rPolygon->getLines(),
$rPartition->getLines()
));
//for example, dump plain result:
var_dump($rResultSet->getPolygons());
Vous pouvez également trouver cet exemple here Mais je pense que ce n'est pas la solution exacte pour votre question, puisque ma classe LineSet_2D retournera tous les polygones en boucle (c.-à-d. pas seulement des «morceaux»).
De l'image, il n'est pas évident - quel est le critère d'ajout de ligne dans la partition résultante (lignes, qui sont les arêtes sont présentes, mais il y a aussi quelques lignes qui traversent les côtés d'un polygone) –
la ligne doit avoir les directions des arêtes et commencer sur chaque point de contour. Mais mon but est de définir des directions aléatoires et de faire la décomposition dans cette direction. – Hunk
Donc, c'est juste un ensemble de lignes? Je veux dire, l'entrée est: polugon qui sera décomposé et un certain nombre de lignes (laissez-les être des parallèles aux bords du polygone). Et qu'attendez-vous comme résultat? Un ensemble de nouveaux polygones? –