Koordinatensystem als Array speichern?

equin

Aktives Mitglied
Hallo,

ich habe ein Koordinatensystem, dass von x=-100 bis x=100 und y=-100 und y=100 läuft. Das ganze habe ich als zweidimensionales Array mit der Länge 200 abgespeichert, wobei ich dann beim einfügen bzw. auslesen von werten die Indizes so umrechne dass an Position 0,0 des Array beispielsweise x=-100,y=-100 steht.

Nun frage ich mich ob das irgendwie eleganter lösen könnte?
 
Da fällt mir nichts ein. Sollte aber auch nur in zwei Methoden benötigt werden? ([c]get(int x, int y)[/c], [c]set(int x, int y, T value)[/c])
 
In welcher Hinsicht "eleganter"?

Ein interface drumwickeln
Java:
interface CoordinateSystem
{
    int getMinX();
    int getMinY();
    int getMaxX();
    int getMaxY();
    int get(int x, int y);
    void set(int x, int y, int value);
}
könnte die Verwendung einfacher machen. Und wenn man irgendwann mal ein Koordinatensystem der Größe 1000000x1000000 braucht, das nur 10 Einträge hat, implementiert man das interface so, dass die Daten in einer HashMap liegen, und am Rest der Programms ändert sich nichts.
 
Ich dachte an so etwas...
Java:
public class Foo<T> {

    private final T[][] data;
    private final int size;

    @SuppressWarnings("unchecked")
    public Foo(int size) {
        this.size = size;
        data = (T[][]) new Object[size * 2 + 1][size * 2 + 1];
    }

    public T get(int x, int y) {
        return data[x + size + 1][y + size + 1];
    }

    public void set(int x, int y, T value) {
        data[x + size + 1][y + size + 1] = value;
    }
}
 
Wenn es immer ein Koordinatensystem sein soll, bei dem breite und höhe gleich sind, und der Ursprung immer horizontal und vertikal in der Mitte liegt, reicht das. Mein Vorschlag war die nahe liegende Verallgemeinerung, die diesen Fall als Spezialfall mit abbilden kann (ob nun 'int' oder 'T' sei mal egal)
 
Ja klar, ich wollte in dieser Beispielimplementierung zeigen, wie ich Getter und Setter implementieren würde. Natürlich kann man das von "deinem" Interface ableiten 🙂
 

Zurück
Oben