2012-04-12 3 views
3

Ich würde 2D cartesian Koordinaten in einem 2D JS-Array darstellen. Der 2d-Raum ist von unbestimmter Größe (kann sich auch in -x und -y-Raum erstrecken). Dies ist in Ordnung für positive x- und y-Werte, aber mit einem minimalen Index von 0 in JS-Arrays kann ich nicht in den negativen x- und y-Raum hineinreichen.Darstellen von 2d Leerzeichen von unbestimmter Größe mit JS-Arrays - negative Indizes?

Ich habe ein paar kurze Informationen über die Möglichkeit der Verwendung negativer Indizes in JS gelesen, und das ist anscheinend technisch möglich, obwohl nicht richtig unterstützt (z. B. Array-Funktionen funktionieren nicht richtig).

Ich bin mir sicher, dass andere eine ähnliche Anforderung haben müssen, also würde ich gerne fragen - was ist die empfohlene Art, dies in JS zu modellieren? Sind negative Array-Indizes eine praktikable Lösung?

+0

hmm, das erste, was einem einfällt, ist ein Objekt, das zwei Arrays enthält, eines für das positive Ende und eines für das negative Ende. Ich bin mir jedoch nicht sicher, wie ich mit 2 Nullen umgehen soll oder ob sie kontinuierlich sind. – Joseph

+0

@Joseph, yeah Ich dachte auch in diese Richtung, aber ich habe das Gefühl, dass es unordentlich werden könnte, wenn es um Dinge geht, die die +/- Grenzen überschreiten. Es gibt auch das Null-Problem, das du erwähnst ... – UpTheCreek

Antwort

1

Sind Sie sicher, dass Sie ein negatives Indiz benötigen? Normalerweise beginnt jedes Koordinatensystem für Computergrafik bei (0/0) in der oberen linken Bildschirmecke. Und sie ziehen ihre Achsen woanders hin.

So ist die Lösung für eine endliche Größe nur die Koordinaten zu transformieren. Auch Sie können negative indizes auf Arrays verwenden, aber besser, dass "Schlüssel auf Array-Objekte" aufrufen. Wenn Sie ihre Einschränkungen kennen, können Sie sie verwenden:

  • Array.length funktioniert nur für positive indizes.
  • Daher können Sie keine Schleife von 0 zu a.length - Sie müssen eine andere Lösung finden. (und denke nicht an "for-in").
  • Sie müssen also einen negativen Start für die Schleife bestimmen - sei es eine Konstante oder eine andere Eigenschaft Ihres Array-Objekts (ohne die Auto-Update-Funktion!).

Aber Sie sagen, Ihr Raum ist unbestimmt. Das Problem ist nur, dass es keine infinite Datenstruktur gibt - in keiner Programmiersprache. Natürlich können Array-Indices sehr groß werden, aber brauchen Sie sie wirklich? Ich bin mir sicher, dass ein zweidimensionales Array mit einer Größe von (2^32)^2 nichts als eine riesige Verschwendung von Speicherplatz ist - oder zumindest etwas, das Ihre Anwendung extrem langsam macht.

Es könnte besser sein, an ein eindimensionales Array mit Objekten zu denken, die Punkte darstellen. Sie können es einfach überfahren, Sie können eine beliebige Anzahl für Koordinatenwerte haben und sie benötigen nicht so viel Speicher.

+0

Ja, leider ist der Platz keine "bekannte" endliche Größe (es ist kein Bildschirm) - also kann ich mich nicht verwandeln :(Du hast einige gute Punkte gemacht - ich Ich werde ihnen ein paar Gedanken machen, danke. – UpTheCreek

+0

Sie muss nicht vorher bekannt sein, sie muss immer endlich sein. Die Grenzen und die Transformationsfunktion können sich während der Laufzeit ändern. – Bergi

+1

ah ja, hab's muss nicht "unendlich" sein, gerade groß genug, um so zu sein. Also könnte eine Art dynamische Transformationsfunktion eine Option sein. Allerdings müssten Sie das gesamte Array nicht jedes Mal verschieben, wenn Sie die -ve erhöhen Grenzen? Vermutlich durch Kopieren in ein neues Array - klingt teuer! – UpTheCreek

Verwandte Themen