Author Topic: Entfernungtabelle erstellen  (Read 1916 times)

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 209
  • Seit gemoint liebe Gemeinde
    • View Profile
Entfernungtabelle erstellen
« on: 2021-Feb-13 »
Moin,
ich möchte mal eine fiktive Entfernungstabelle erstellen und die Tabelle mit Random zahlen füllen.
Was eigentlich kein Problem ist, aber wie bekommt man das hin das die Entfernungen stimmen?

Also von A nach A oder B nach B usw. ist logischerweise immer null, aber wenn ich die Tabelle komplett fülle
habe ich Werte die nicht stimmen. A nach Z  hat einen anderen Wert wie Z nach A.

Jemand eine Idee?

Schönes WE.


So ungefähr.

    A B C

A  0 5 9
B  5 0 7
C  9 7 0



« Last Edit: 2021-Feb-13 by Worebu »
Intel I5 9600 - RTX 2080 Super, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5116
  • O Rly?
    • View Profile
Re: Entfernungtabelle erstellen
« Reply #1 on: 2021-Feb-14 »
Moin,

was hast du damit vor?
Willst du ein Pathfinding schreiben?

Komm komm nicht ganz hinterher, was es machen soll, dein Aufbau...
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 209
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Entfernungtabelle erstellen
« Reply #2 on: 2021-Feb-14 »
Hi,
das ist erstmal nur ein Test. Das soll eine Entfernungstabelle von fiktiven Orten sein,
nur das die Entfernungen  Random sein sollen. Ich  bekomme das mit dem füllen nur nicht hin.


Ein Feld das so gefüllt ist:


http://www.auslandversicherungen.de/entfernungstabelle.html



Hast Du eine Idee?

Worebu
« Last Edit: 2021-Feb-14 by Worebu »
Intel I5 9600 - RTX 2080 Super, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Offline S. P. Gardebiter

  • Mr. Polyvector
  • ***
  • Posts: 247
    • View Profile
    • Tile 44 Interactive
Re: Entfernungtabelle erstellen
« Reply #3 on: 2021-Feb-14 »
Ich würde dir zu einer geometrischen Lösung raten, da sie einfach nachvollziehbar ist.
Zunächst solltest du zufällige x und y Koordinaten zu deinen Punkten generieren.

Dann kannst du die Distanz zwischen zwei Punkten wie folgt ausrechnen:

d = √((x1 - x2)² + (y1 - y2)²)

Es handelt sich hierbei um die Pythogoras Formel (a² + b² = c²):
Die Länge der Seite a ist hierbei die Differenz zwischen den beiden x-Werten deiner Punkte und die Länge der Seite b ist die Differenz zwischen den y-Werten.
Kurz gesagt, bei dir ist a = x1 - x2 und b = y1 - y2.
Zum Schluss kannst du die Punkte quadrieren, addieren und danach die Wurzel ziehen, dann hast du deinen Wert für c, was bei dir die Distanz zwischen den beiden Punkten ist.

Die Logik dahinter: Du konstruierst ein Dreieck anhand deiner beiden Punkte und kannst so die Distanz über die Ermittlung der dritten, längsten Seite deines Dreiecks ausrechnen.

Wenn du jetzt deine Schleife programmierst, kannst du noch folgende Optimierungen vornehmen:
  • Wenn deine beiden Punkte gleich sind (beide Schleifenvariablen haben den selben Wert), dann ist die Distanz immer 0, das ist die Diagonale in deiner Tabelle.
  • Du kannst die beiden Schleifenvariablen als Indizes vertauschen und schauen ob in deiner Tabelle bereits ein Wert vorhanden ist, wenn ja, dann brauchst du die Distanz nicht neu ausrechnen, sondern nur innerhalb der Tabelle kopieren (von A nach B ist die selbe Distanz wie von B nach A).

Ich hoffe ich konnte dir helfen.

Liebe Grüße.
« Last Edit: 2021-Feb-15 by S. P. Gardebiter »
~ Cave Story rules! ~

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 209
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Entfernungtabelle erstellen
« Reply #4 on: 2021-Feb-14 »
Hmm,
da ich kein abgeschlossenes Mathe Studium habe und nur so ein Hobbyprogrammierer bin hast Du mir leider nicht helfen können.
Aber ich danke Dir dafür das Du dir Gedanken über mein Problem gemacht hast.

Worebu
Intel I5 9600 - RTX 2080 Super, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Offline S. P. Gardebiter

  • Mr. Polyvector
  • ***
  • Posts: 247
    • View Profile
    • Tile 44 Interactive
Re: Entfernungtabelle erstellen
« Reply #5 on: 2021-Feb-14 »
Nichts für Ungut aber das ist Stoff den man in der Mittelstufe (8. bis 10. Schulklassen) lernt.
Gerade für 2D Sachen ist es empfehlenswert da fit zu sein. In vielen Fällen kommt man nicht drum herum oder nur mit sehr komplizierten Algorithmen.
Falls du Schwierigkeiten beim Verständnis hast, kannst du ggf. hier nachlesen:
https://www.gut-erklaert.de/mathematik/x-y-koordinatensystem-mit-punkte.html
https://www.gut-erklaert.de/mathematik/satz-des-pythagoras.html

Es gibt mit Sicherheit auch mathematisch elegantere Wege das Ganze zu lösen. Wenn es sich dabei jedoch um eine Tabelle mit Entfernungen soll die in sich logisch ist, würde ich ad-hoc stark vermuten, dass es zumindest keinen simpleren Weg gibt.

Vielleicht hilft dir ja etwas Code. Da ich in GLB etwas eingerostet bin, hier Pseudocode:
Code: (glbasic) [Select]
size = 10

FOR n = 0 TO size - 1
     px[n] = RND(10)
     py[n] = RND(10)
NEXT

FOR n1 = 0 TO size - 1
     FOR n2 = 0 TO size - 1
          IF n1 <> n2 THEN
               IF d[n2, n1] > 0 THEN
                    d[n1, n2] = d[n2, n1]
               ELSE
                    d[n1, n2] = SQR(POW(px[n1] - px[n2], 2) + POW(py[n1] - py[n2], 2))
               ENDIF
          ENDIF
     NEXT
NEXT

Liebe Grüße.
« Last Edit: 2021-Feb-15 by S. P. Gardebiter »
~ Cave Story rules! ~

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 209
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Entfernungtabelle erstellen
« Reply #6 on: 2021-Feb-14 »
Meine Schulzeit ist aber 40 Jahre her.
Intel I5 9600 - RTX 2080 Super, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD