suche vorschrift

Neue Frage »

nullLF Auf diesen Beitrag antworten »
suche vorschrift
hallo,

ich suche eine zuordnungsvorschrift mit der ich aus den koordinaten eines punktes eine art ID gewinnen kann... diese ID ist eineindeutig, das heisst jeder punkt hat genau eine ID..

sortiere ich dann die IDs auf- oder absteigend, dann sind diejenigen, deren punkte weiter voneinander entfernt lagen auch in dieser sortierten liste weiter voneinander entfernt..

die abstände zwischen den IDs müssen nicht exakt die abstände der punkte wiederspiegeln, nur die sortierung sollte fehlerfrei möglich sein..

ich hab mir mal folgenden ansatz überlegt...
ein punkt [x:y] wird so in eine ID umgewandelt:
x = ab [a udn b sind ziffern!]
y = cd
id = acbd

z.b. Punkte: [x:y] ==> und die ID dazu
12:34 ==> 1324
12:35 ==> 1325
14:32 ==> 1342
16:34 ==> 1364
12:30 ==> 1320

das von mir erdachte system hat leider noch nicht den gewünschten effekt...
hat vielleicht jemand eine idee?
Tobias Auf diesen Beitrag antworten »

Deine Idee mit den Abständen ist nicht sehr praktikabel, da ein Abstand immer zwischen zwei Punkten definiert ist. Da du aber die ID aus einer Koordinate berechnen willst, wird der "Abstand" nicht in die Berechnung einfließen.

Mein Vorschlag wäre, die Koordinaten nach dem Abstand zum Urspruch zu ordnen. Dafür nimmt man die euklidische Distanz zum Ursprung. Da diese auch rationale Zahlen erzeugt, muss das ganze noch gerundet werden.



Hieraus sind jetzt die Koordinaten an sich nicht zu entnehmen, deshalb ist die ID noch nicht vollständig.

Die trivialste Lösung wäre, nun einfach die Koordinaten noch dranzuhängen. Hierfür musst du allerdings die maximale Stellenzahl pro Koordinatenkomponente wissen, weil sonst die Entfernungsordnung wieder zerstört wird.

Nehmen wir an, eine Koordinate besteht aus zweistelligen Komponenten [xx : yy].

[12:34] hätte dann die ID:


==> 361234

Natürlich ist hier nur der Abstand zum Ursprung (nicht der Punkte untereinander) relevant für die Ordnung.
Tolga Auf diesen Beitrag antworten »

Das wird mit einer einfachen mathematischen Funktion nicht gehen.
Eine rekursive Lösung am PC wäre das eleganteste.

Du musst zuerst einen Sortieralgorithmus deiner Wahl implementieren.
Dann alle Abstände errechnen und dem sportieralgo übergeben, damit er diese in einem array sortiert Augenzwinkern

Dann erledigt sich die sache mit der ID auch von selbst, da die Ordnung der Abstände durch die Indizes des arrays eindeutig gegeben sind.

MfG.
Tobias Auf diesen Beitrag antworten »

Das funktioniert auch nicht. Man würde Paare sortieren, denn nur Paare von Punkten besitzen auch einen Abstand voneinander. Aus dieser Ordnung der Paare lässt sich jetzt keine Ordnung der Punkte in einer Liste erstellen. Mögliche wäre eine Matrix oder der Abstand zu einem Fixpunkt (z.B. Ursprung oder Schwerpunkt).
AD Auf diesen Beitrag antworten »

Die Idee von nullF ist schlicht nicht durchführbar, wie bereits mehrfach hier erkannt.

Ich will nur noch an einem Beispiel die Unmöglichkeit des Ansinnens demonstrieren:

Man betrachte ein regelmäßiges n-Eck A_1A_2...A_n, sagen wir ursprungzentriert. Dann müsste nach nullF's Vorstellungen einer totalen Ordnung entweder



oder



gelten - ich denke, ich kann hier aufhören...
Leopold Auf diesen Beitrag antworten »

@ nullLF

Warum nimmst du nicht die Koordinaten selbst? Das ist doch schon eine Codierung von Punkten der euklidischen Ebene. Und dann die sogenannte lexikographische Anordnung: ein Punkt kommt vor einem anderen, wenn seine x-Koordinate kleiner ist als die x-Koordinate des anderen Punktes ist; sind beide x-Koordinaten gleich, kommt er vor dem anderen, wenn seine y-Koordinate kleiner als die des anderen ist. Anschaulich heißt das: Punkte weiter links im Koordinatensystem sind kleiner, und bei Punkten, die auf einer Parallelen zu y-Achse liegen, liegen die kleineren weiter unten.

Beispiel:

(-4,-2) < (-4,5) < (-4,19) < (-2,16) < (-2,59) < (13,-102)

Natürlich hat diese Anordnung nicht den von dir gewünschten Effekt der "Abstandstreue".
 
 
nullLF Auf diesen Beitrag antworten »

So, erstmal danke für die vielen antworten...

was ich vielleicht vergessen habe zu erwähnen (besonders dann im hinblick auf das oben genannte regelmäßige n-eck) ist, dass meine punkte nur im ersten quadranten liegen.. (wobei es keinen wirklichen unterschied macht, wo das nun zentriert ist)

d.h. die idee die euklidische distanz zum ursprung einzubauen ist schon mal eine idee... nur können natürlich punkte, die die gleiche euklidische distanz ziemlich weit auseinander liegen....

so alles in allem bestätigt ihr mich also in dem punkt, dass es wohl nicht wirklich geht....

das ganze in ein array packen wird nicht gehen, weil ich damit datensätze in einer mysql datenbank "sortieren" möchte...

insbesondere geht es darum ein "fenster" auszuschneiden.. vielleicht dazu noch etwas mehr..
in besagter mysql-datenbank findet sich eine liste von punkten und weiterführenden daten.. diese punkte repräsentieren sternensysteme und sollen später auf einer karte dargestellt werden.. da der spieler nur über radar-geräte mit begrenzter reichweite verfügen soll, muss es mir möglich sein fenster von punkten aus der datenbank zu ermitteln, die der radar-reichweite (kreis um ein im Mittelpunkt liegendes schiff des spielers) möglichst nahe kommen..
einfach, weil ich nicht jedesmal tausende datensätze schaufeln will smile
dabei ist es sehr praktisch, wenn ich EINE ID hätte... einen datentyp "Punkt" gibt es leider nicht..
aber man könnte sich so etwas bauen in dem man zwei spalten als eine ID betrachtet... das wird dann natürlich doof, weil ich diese Punkte noch an mehr stellen brauche.. z.B. um gebäude auf planeten zu stellen etc....

naja ich werde dann in richtung der zwei spalten arbeiten denke ich...
danke für die antworten Augenzwinkern

ps: @arthur: das mit der totalen ordnung gefällt mir... totale ordnung, totaler posts, totale vernichtung... *g*
nullLF Auf diesen Beitrag antworten »

wie sähe es denn mit anderen koordinatensystemen aus? z.b. polarkoordinaten?

bei polarkoordinaten hätte ich ja den vorteil sowohl betrag als auch winkel erfasst zu haben.. d.h. ich könnte mit einer winkel- und betragstoleranz um einen mittelpunkt an mein ausschneideproblem herangehen, oder?

die frage ist allerdings, ob sich das so ohne weiteres als ein zahlenwert codieren lässt....

[edit]
oh, doppelpost...
[/edit]
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »