Distanzmatrix

Mickey3k

Neues Mitglied
Hallo,
ich muss für ein Java Projekt eine Distanzmatrix erstellen, die mir in jeder Zeile und Spalte die Entfernung zweier Städte ausgibt. Die Entfernung wird über die Orthodrome berechnet. Ich habe es zumindest geschafft, die Formel in Java zu schreiben und mir ein Matrix ausgeben zu lassen, aber ich möchte die Formel ja nicht separat für jede mögliche Distanz hinschreiben, sondern das ganze irgendwie automatisieren. Bis jetzt habe ich das hier:

Java:
public class Matrix {
            public static void main(String args[]){
           
            //Variablen
               
                String hd = "HD";
                String go = "Go";
                String mr = "Mr";
                String bn = "Bn";
                String b = "B";
                String p = "P";
                String mos = "Mos";
                String ny = "NY";
                String lon = "Lon";
                String ls = "Ls";
               
                //Zentriwinkel
                double winkel;
               
                //Strecke für Erdumfang 40.000km
                double strecke;
               
                //Breitengrad der Stadt A
                double aa;
               
                //Breitengrad der Stadt B
                double ab;
               
                //Längengrad der Stadt A
                double ba;
               
                //Längengrad der Stadt B
                double bb;
               
            //Streckenberechnung über Orthodrome allgemein
               
                //winkel = Math.acos(Math.sin(aa)* Math.sin (ab) + Math.cos(aa) * Math.cos(ab) * Math.cos(bb - ba));
                //strecke = (winkel / 360) * 40000;
               
            //Strecke HD - HD
               
                winkel = Math.acos(Math.sin(49.41)* Math.sin (49.41) + Math.cos(49.41) * Math.cos(49.41) * Math.cos(8.69 - 8.69));
                strecke = (winkel / 360) * 40000;
               
            
               
            // Matrix
                double [][] matrix = new double [][]{
                        {strecke, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
                        };
               
                          for (int k = 0; k < matrix.length; k++) {
                             
                                for (int l = 0; l < matrix[k].length; l++) {
                     
                                    System.out.print("|" + matrix[k][l]+ "|" + "\t");
                     
                                }
                     
                                System.out.println("");
                              
                         
                                  }
                             }   

}

Ausgegeben wird dann das:
|0.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|
|1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0| |1.0|

So sollte es auch aussehen. Die Distanz Heidelberg-Heidelberg ist natürlich 0, wie in Zeile 1/Spalte 1. Nur wie kann ich das ganze jetzt automatisieren? Mit einer Schleife? Habe leider noch sehr wenig Erfahrung in Java..

Viele Grüße und danke schonmal für Hilfe,

Micha
 
S

SlaterB

Gast
hast du denn zu allen Orten die Position? fehlt bisher noch im Quellcode, könnte in ein Array oder eine Liste,

genau wie du ausgibts, mit einer Doppelschleife
Java:
for (int k = 0; k < matrix.length; k++) {
                             
                                for (int l = 0; l < matrix[k].length; l++) {
kannst du die matrix auch berechnen, da ist nichts dabei,
k und l durchlaufen die Schleifen so dass jede Kombination dran kommt,
statt matrix[k][l] auszugeben solltest du nun eben matrix[k][l] ausrechnen, setzen,

mit k holst du die relevanten Daten von Stadt k, mit l genauso,
dann sind alle nötigen Daten da und die Formel kann einmal hingeschrieben berechnen,
dank Schleife passiert es für alle k und l,
Spezialfälle wie k == l kannst du abfangen
 

Mickey3k

Neues Mitglied
Hey,

ja ich habe die Koordinaten zu allen Städten. Ich verstehe zwar, was du meinst, weiß aber nicht, wie ich das in Java umsetzen soll ;) Sind noch ziemlich am Anfang vom Java-Kurs und finde die Aufgabe auch etwas heftig dafür..

Wenn du sagst, dass "k" sich die relevanten Daten von Stadt k holt und "l" die von Stadt l, ich ja aber einmal Breitengrad und einmal Längengrad für jede Stadt habe, die auch unterschiedlich in der Formel vorkommen, wie sollte ich das dann umsetzen? Die Abstandsformel nutzt ja immer Längengrad und Breitengrad von Stadt A UND Stadt B, das heißt, ich habe für jede Berechnung eigentlich 4 verschiedene Variablen.. Könntest du vielleicht kurz im Code schreiben, wie du das meinst?

Die Koordinaten sind
Java:
    /**Längen- und Breitengrad der Städte
               hdL = 49,41
               hdB = 8,69
               GoL = 51,53
               GoB = 9,93
               MrL = 50,81
               MrB = 8,77
               BnL = 50,73
               BnB = 7,1
               BL = 52,52
               BB = 13,4
               PL = 48,86
               PB = 2,35
               MosL = 55,75
               MosB = 37,62
               NYL = 40,72
               NYB = -74
               LonL = 51,51
               LonB = -0,12
               LsL = 38,71
               LsB = -9,14
               */
 
S

SlaterB

Gast
Java:
                //Breitengrad der Stadt A
                double aa = breitengrade[k];
               
                //Breitengrad der Stadt B
                double ab = breitengrade[l];
               
                //Längengrad der Stadt A
                double ba = laengengrade[k];
               
                //Längengrad der Stadt B
                double bb = laengengrade[l];
wenn es entsprechende Arrays gibt
 

Neue Themen


Oben