2017-03-07 3 views
2

j'ai un polygone avec les coordonnéesComment diviser un polygone en polygones de sous et attribuer id les

(1,2) 
(3,2) 
(1,1) 
(3,1) 

Je veux diviser le polygone en 9 parties et attribuer à chaque partie un exemple number.For enter image description here

J'ai donc essayé comme

double width = 3-1=2; 
double height = 2-1=1; 

subpolygon width=2/3=0.667 
subpolygon height=1/3=0.33 

maintenant, je veux avoir l'id subpolygone et leurs coordonnées comme

1 -> (1,2),(1.67,2),(1,1.67),(1.67,1.67) 

et ainsi de suite. Donc j'ai besoin d'une carte de hachage comme ci-dessous pour stocker l'information.

HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>(); 

Toute aide est appréciée.

+1

Comment envisagez-vous de mapper les informations dans le 'hmap'? Aussi juste pour vérifier, votre polygone est un quadrilatère pour l'instant qui doit être divisé en 9 parties, non? Et plus loin vous avez besoin de stocker la partie à sa carte de coordonnées? – nullpointer

+0

lorsque j'attribue l'identifiant, j'essaie d'obtenir les quatre coordonnées du sous-polygone puis de les stocker dans la carte de hachage.Oui mon polygone est un quadrilatère pour l'instant qui doit être divisé en 9 parties et doit stocker la partie à sa carte de coordonnées. – RKR

Répondre

1

Je vais vous donner un indice pour commencer. Ce que vous voulez vraiment, c'est une façon intelligente ou efficace de parcourir tous les sommets de votre polygone. Commençons par regarder le positionnement du coin supérieur gauche de chaque sous-polygone. En commençant dans le coin supérieur gauche de votre polygone, nous allons d'abord faire une boucle de gauche à droite, puis de haut en bas. Soit sw dénote ta sous-largeur et sh dénote ta sous-largeur.

Alors, quelle est la formule pour le coin supérieur gauche de chaque sous-polygone? Eh bien, nous commençons à (min x, max y). C'est le coin supérieur gauche du sous-polygone 1. Ensuite, nous ajoutons sw à la valeur x pour obtenir le coin supérieur gauche du sous-polygone 2 (min x + sw, max y). Ensuite, le coin supérieur gauche du sous-polygone 3 est (min x + 2 * sw, max y).

Ensuite, nous devons descendre une hauteur de sh pour obtenir le coin supérieur gauche du sous-polygone 4. Ceci est (min x, max y - sh). Ensuite, nous allons à nouveau de gauche à droite: (min x + sw, max y - sh) pour le sous-polygone 5, (min x + 2 * sw, max y - sh).

Voir le modèle? Déroulez une autre hauteur de sh et de nouveau de gauche à droite: (min x, max y - 2 * sh), (min x + sw, max y - 2 * sh), (min x + 2 * sw, max y - 2 * sh).

Donc, si je laisse mon index i plage de 0 à 8 (qui correspondra à vos subpolygons 1 à 9), vous pouvez voir que le schéma général pour le coin supérieur gauche subpolygone (i+1) est:

(min x + (i % 3) * sw, max y - (i/3) * sh).

Notez que la précédente (i/3) est une division entière (arrondi à l'inférieur), par ex. pour le sous-polygone 8, i = 7 et 7/3 = 2. Je crois que c'est suffisant pour vous aider à démarrer. Personnellement, j'aurais préféré commencer dans le coin inférieur gauche et travailler de gauche à droite, de bas en haut, mais je me suis basé sur votre numérotation. Vous pouvez trouver des formules similaires pour les autres coins, et un peu de réflexion peut vous aider à généraliser ces formules dans différentes partitions (c'est-à-dire regarder la division par 3 et modulo 3 parties).