2017-03-07 1 views
2

Ich habe zuweisen ein Polygon mit den KoordinatenWie ein Polygon in Unter Polygone teilen und id sie

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

Ich mag das Polygon in 9 Teile teilen und jeden Teil ein Number.For Beispiel zuweisen enter image description here

So versuchte ich, wie

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

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

Jetzt habe ich die Subpolygonfläche id und ihre Koordinaten wie

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

und so weiter.So brauche ich eine Hash-Karte wie unten, um die Informationen zu speichern.

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

Jede Hilfe wird geschätzt.

+1

Wie planen Sie, die Informationen in der 'hmap' abzubilden? Auch nur um zu überprüfen, Ihr Polygon ist für jetzt ein Viereck, das in 9 Teile geteilt werden muss, oder? Und weiter müssen Sie das Teil in seiner Koordinatenkarte speichern? – nullpointer

+0

Wenn ich die ID zuweisen, versuche ich, die vier Koordinaten des Subpolygons zu bekommen und dann diese in der Hash-Map zu speichern. Ja, mein Polygon ist ein Viereck für jetzt, das in 9 Teile geteilt werden muss und das Teil speichern muss zu seiner Koordinatenkarte. – RKR

Antwort

1

Ich gebe Ihnen einen Tipp, um loszulegen. Was Sie wirklich wollen, ist eine clevere oder effiziente Möglichkeit, alle Eckpunkte Ihres Polygons zu durchlaufen. Beginnen wir damit, einfach die Positionierung der oberen linken Ecke jedes Subpolygons zu betrachten.

Beginnend an der oberen linken Ecke Ihres Polygons, werden wir zuerst von links nach rechts und dann von oben nach unten durchlaufen. Lassen Sie sw Ihre Unterbreite und sh bezeichnen Sie Ihre Unterhöhe.

Also, was ist die Formel für die obere linke Ecke jedes Subpolygons? Nun, wir beginnen bei (min x, max y). Dies ist die obere linke Ecke des Subpolygons 1. Dann fügen wir sw zum x-Wert hinzu, um die obere linke Ecke des Subpolygons 2 (min x + sw, max y) zu erhalten. Dann ist die obere linke Ecke von Subpolygon 3 (min x + 2 * sw, max y).

Dann brauchen wir eine Höhe von sh fallen bis auf die linke obere Ecke des Subpolygonfläche zu bekommen 4. Diese (min x, max y - sh) ist. Dann gehen wir wieder nach links: (min x + sw, max y - sh) für Subpolygon 5, (min x + 2 * sw, max y - sh).

Noch ein Muster sehen? Lassen Sie eine weitere Höhe von sh herunter und gehen Sie wieder nach links: (min x, max y - 2 * sh), (min x + sw, max y - 2 * sh), (min x + 2 * sw, max y - 2 * sh).

Also, wenn ich meinen Index i Bereich von 0 bis 8 lassen (was Ihre Subpolygone 1 bis 9 entsprechen wird), können Sie sehen, dass das allgemeine Muster für die obere linke Ecke Subpolygonfläche (i+1) ist:

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

Es sei angemerkt, dass die vorangehende (i/3) eine ganzzahlige (abgerundete) Teilung ist, z. für Subpolygon 8, i = 7 und 7/3 = 2.

Ich glaube, das ist genug, um loszulegen. Ich persönlich hätte es vorgezogen, in der unteren linken Ecke zu beginnen und von links nach rechts, von unten nach oben zu arbeiten, aber ich ging aufgrund Ihrer Nummerierung. Sie können ähnliche Formeln für die anderen Ecken finden, und ein wenig Nachdenken kann Ihnen helfen, diese Formeln in verschiedene Partitionen zu verallgemeinern (d. H., Sie betrachten die Division durch 3 und modulo 3 Teile).

Verwandte Themen