# java 3D Raster



## Bohno (21. Feb 2009)

Hi,
ich schreibe ein Programm in dem man mit Legosteinen ein Objekt bauen kann.
Ich habe jetzt überlegt wie ich überprüfen kann, ob ich an eine Stelle bauen kann.
Mir ist die Idee gekommen, dass ich das Feld Raster und so jedem Feld dann ein Objekt zu ordne. So könnte ich dann doch auch auf jedne Stein mit klick zugreifen oder?

Oder habt ihr eine andere Idee?

Auf dem Bild seht ihr 4 Steine, ich will es jetzt so schrieben, dass ich mit der Muas auswählen kann, wo ich den nächsten stein hinsetze.

Habt ihr vorschläge?

MfG


----------



## Marco13 (21. Feb 2009)

Klingt vernünftig. Mein erster Ansatz wäre "spatial hashing". Die kleinste Einheit, die es bei Lego gibt, ist ja ein 1x1-Stein mit 0.3 Eineiten Höhe (also so ein kleiner, flacher, einzelner Noppen - du weißt schon...). Man könnte jede solche "Zelle" im verfügbaren Raum z.B. so beschreiben

```
class Cell
{
    private int x;
    private int y;
    private int z;

    //  Die Methoden "equals" und (WICHTIG: ) "hashCode" 
    //  richtig überschreiben!
}
```

Wenn man dann einen Stein hat, wie z.B. so einen würfelförmigen 2x2-Stein der Höhe 1, dann würde der 2x2x3 solche "Zellen" belegen. Wenn man einen Stein an einer bestimmten Position hat, kann man sich von ihm die Zellen abholen, die er belegt. Diese Belegung könnte man dann in den spatial hash eintragen:

```
Stone stone = new Stone(2,2,3);
stone.setLocation(12,45,12);
for (Cell cell : stone.occupiedCells())
{
    hashMap.put(cell, stone);
}
```
Die Abfrage, ob man dann einen anderen Stein an eine bestimmte Stelle legen kann, ist dann ganz einfach

```
Stone otherStone = new Stone(4,2,3);
otherStone.setLocation(11,43,11);
for (Cell cell : otherStone.occupiedCells())
{
    Stone stoneThatAlreadyOccupiesThisCell = hashMap.get(cell);
    if (stoneThatAlreadyOccupiesThisCell != null)
    {
        System.out.println("Da passt er nicht hin!");
    }
}
```
Aber das nur als spontane Idee...


----------



## Bohno (21. Feb 2009)

Hey danke Marco13,

war schonmal ne gute Hilfe ich werdce das mal versuchen umzusetzen.

freue mich aber noch über andere Beiträge

Hey ich habe noch eine Frage?

Mit welchem Behavior fange ich eine Mausklick ab und kann dann die Koordinaten(x,y,z) abfragen?


----------

