Java - Datenstruktur für/als erweiterbares 2D-Array?


17.06.2020, 22:08

Um ein wenig klarer zu machen versuche ich mal etwas mehr zu erklären.

Mein Bildschrim besteht aus 384 x 216 Pixeln, wobei diese Zahlen von zwei finalen Variablen abhängig sind, dass ist für meine Frage allerdings unwichtig. Wenn ich eine Form, zum Beispiel ein Rechteck auf den Bildschrim bringen will, geschieht das nicht direkt über OpenGL (welches in meinem Projekt eingebettet ist) sondern wird mit einer eigenen Methode errechnet, dann, vereinfacht gesagt, auf ein 2D-Farb-Array gespeichert und später erst mit OpenGl auf den bildschirm gebracht.

Wenn ich jetzt versuche eine Form, ein wenig oder ganz ausserhalb des Bildschirms zu zeichnen werden die nicht sichtbaren Pixel einfach ignoriert, sprich nicht gezeichnet.

Jetzt will ich allerdings, aus Gründen die ihr in meiner letzten Frage erfahrt, diese Formen (nicht nur eine Form sondern unterschiedlichste Grafiken) auch ausserhalb des Bildschirms zeichnen können (sie werden nicht wirklich auf den Bildschirm gezeichnet, sondern auf eine weitere Datenstruktur).

Und da ich im Vorhinein nicht weiß wo und wie groß diese Formen sein werden, ist der logische Schluss, dass ich eine Datenstruktur brauche die einfach und vor allem schnell erweiterbar ist.

4 Antworten

Map<Pos, Color>
class Pos(val x, val y)

oder

List<PosColor>
class PosColor(val x, val y, val color)

void set(PosColor pc) {
  val index = list.first { it.x == pc.x && it.y == pc.y}
  if(index == -1) list.add(pc);
  else list.set(index, pc);
}

oder so ähnlich

Ein Dictionary, wobei du als Key einen kombinierten x- und y-Wert verwendest, wäre eine Möglichkeit. Also z.B. x * 100000 + y, je nach Wertebereich (oder x << 32 or y etc)

Woher ich das weiß:Studium / Ausbildung – Datenverarbeitungs-Kfm, Hobby- und Profi-Programmierer
Jesaja01 
Fragesteller
 17.06.2020, 22:10

Danke für deine Antwort, ich schau mir das mal an.

0

Wäre es nicht umgekehrt besser?:

Du hast ein 2D Array von z.B. 1000x1000 und hast eine Box des 'sichtbaren' Ausschnittes. Datenstrukturen mit hoher Dynamik undn vielen Änderungen gibt es kaum mit guter armortisierter Laufzeit.

Dazu kommt, daß Java denkbar ungeeignet für derartiges ist - wenn ich ein Feld effizient erweitern möchte erfordert das hochperformante move-Operationen im Speicher.

Jesaja01 
Fragesteller
 17.06.2020, 23:10

Falls ich den Oberen Abschnitt richtig verstanden habe, und du meinst das ich den sichtbaren Teil mit einem anderen größeren Teil umrahmen soll, dann muss ic leider sagen, dass das zwar besser als ohne Rand wäre, aber trotzdem nicht so universell einsetztbar wie ich brauche, denn leider kann ich nicht wissen ob eine From jetzt 20, 200, 2000 Pixel vom sichtbaren Rechteck weg gezeichnet werden soll.

Mit dem zweiten Abschnitt hast du leider recht, aber daran kann ich nichts ändern und die Sprache zu wechseln macht nur deshalb auch keinen Sinn, ich lerne immernoch die Grundfeste von Java kennen, jetzt umzusteigen fände ich daher sinnlos.

0
KarlRanseierIII  17.06.2020, 23:18
@Jesaja01

Die Frage ist ja eher eine andere:

Warum willst du in einem Offscreen außerhalb des sichtbaren Bereichs zeichen und warum kannst Du nicht abschätzen, wie groß dieser virtuelle Screen ungefähr sein muß.

Ich versuche noch die Anwendugn zu verstehen und ob das Vorgehen sinnvoll ist, oder eventuell der Entwurf krankt und man es ganz anders angehen sollte (oder könnte).

0

Dazu solltest Du noch erklären, was dein Anwendungsfall genau ist und wieso du nicht genau weißt, wo du die Werte einfügen willst. Insbesondere wieso sie vor 0,0 liegen können.

Jesaja01 
Fragesteller
 17.06.2020, 21:47

Ok, ich ergänze nochmal was, könnte kurz dauern.

0
DerEinsiedler  17.06.2020, 21:50
@Jesaja01

Wahrscheinlich ist eine Hashtable, ein Dictonary oder eine dünn besetzte volle x*y-Matrix (Feld) was du brauchen kannst)

1