Map mit Rectangles...

sirbender

Top Contributor
Hi,

ich will viele einzigartige Rectangles in eine Map stecken. Nun ueberlege ich mir gerade wie ich die Map-Keys am besten designe.

Nehmen wir an ich habe ein Rechteck A [x1,y1,w1,h1 -> 100,100,200,50]. Nun wuerde ich gerne die Map bemuehen und schauen ob es ein Rechteck gibt dass 'oben' an A angrenzt und genau dessen Breite hat. Dieses Rechteck B haette die Eigenschaften [100,y1-h2,200,h2].
Dabei sollte ich anmerken dass es entweder 0 oder 1 Rechteck gibt dass an A oben angrenzt. Nicht mehr.

Kann mir jemand einen Tipp geben wie ich am besten die Map keys designe?

Waere es schneller sowas mit einer Liste zu machen und jedesmal komplett drueberzuiterieren?

Danke,
sb
 

Marco13

Top Contributor
Hm schwierig... Also, da könnte man sich vielleicht was ausgefeiltes (sprich: kompliziertes) überlegen, aber wären für diesen Task (soweit ich ihn verstanden habe) nicht vielleicht ZWEI Maps günstiger? Pseudocode
Java:
class RectangleMap
{
    // "Line" ist eine Klasse, die eine Kante eines Rechtecks beschreibt
    private Map<Line, Rectangle> topMap = new ...
    private Map<Line, Rectangle> bottomMap = new ...

    public void add(Rectangle r)
    {
        topMap.put(topLineOf(r), r);
        bottomMap.put(bottomLineOf(r), r);
    }

    Rectangle getRectangleAbove(Rectangle r)
    {
        return bottomMap.get(topLineOf(r));
    }
    Rectangle getRectangleBelow(Rectangle r)
    {
        return topMap.get(bottomLineOf(r));
    }
}

... nur so ein Gedanke...
 
S

SlaterB

Gast
Line ist ne gute Basis,
ordne jedem Rechteck vier Lines zu, entweder als weitere Klasse oder auch als String "x,y -> z,a"

über alle unverknüpften Rechtecke iterieren und deren Linien in die eine Map stecken,
es sei denn es ist schon ein Eintrag vorhanden, dann diese beiden Rechtecke verknüpfen,

ob oben oder unten muss in der Map nicht stehen,
wenn zwei Rechtecke dieselbe Linie teilen, dann kann man die so finden und danach, wenn man sie hat, richtig einander zuordnen,
Mittelpunkt vergleichen oder so

gehört übrigens sicherlich zu
http://www.java-forum.org/java-basi...lichst-groesseren-rechtecken-kombinieren.html
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Wenn die Inhalte der Rechtecke am Anfang disjunkt sind, und nicht nur Oben/Unten angefügt werden soll, kann man das natürlich beliebig verallgemeinern.
 

Ähnliche Java Themen

Neue Themen


Oben