OK pour Point dans le polygone uniquement:
Je pense que le problème est basé sur la "nature fractale" des objets 2D et la distribution incertaine et déséquilibrée de l'information spatiale. Si vous avez une grille régulière, il est facile de calculer la position ou la relation d'une cellule. Mais une isoline d'un modèle de terrain peut avoir des parties simples sur le côté et des parties mathématiquement compliquées de l'autre côté (parties morphologiquement actives sur les crêtes, les vallées ...).
L'indexation tente de gérer deux choses:
Une routine rapide qui vous donne un ensemble de seaux dans lequel vous collectez des objets que vous pouvez distinguer spatialement (les seaux!). Et les BBox sont faciles à calculer et à manipuler.
Un ensemble de relations (chevauchement, toucher) pour distinguer ou relier les éléments spatiaux (les objets).
Malheureusement, les BBox ne vous donneront aucune indication, combien de points se trouvent dans chaque BBox, comment les objets sont façonnés (trous, convexes, ...) et comment les informations sont distribuées localement (90% des points dans le coin supérieur gauche du BBox). Ainsi, vous pouvez trouver des membres d'opération rapide au niveau de l'objet et perdre beaucoup de temps dans la construction de relations du test.
Pour utiliser une approche plus irrégulière, la triangulation IMO en combinaison avec et quadtrees est l'une des stratégies, où vous pouvez rapprocher le bucketing et la partie construction de relations d'un index (bucketing == construction de relations).
Pour l'exemple Point-in-Polygon-Test, il est possible de créer un cache irrégulier en utilisant:
- ! triangulation delaunay contrainte de votre couverture poly, avec des points de maillage de bordure supplémentaires pour la détection en dehors de la couverture
- mettre cela dans un schéma d'indexation à quatre arbres avec pas plus de N triangles par boîte (seaux fractals)
- trouver l'ensemble de triangles auquel le point appartient - la feuille dans le quadtree
- trouver le triangle dans lequel se trouve le point (la partie test sur max. N triangles)
- et demander les ID de polygone des sommets du triangle
- si l'ID est unique le point appartient au polygone, sinon il est en dehors
Le coût de construction de l'étain et des quadtrees est très élevé et difficile à calculer et le quadtree doit équilibrer les grands et les petits triangles (triangles qui ne rentreront pas dans des boîtes de sous-arbres plus petites).
Quelques outils et liens:
Triangle - Triangulation par polygone de contrainte
Quadtrees - Avec des exemples de sources
Dépôt de Stony Brook - Structures de données et géométrie du disque