2017-09-12 1 views
-1

J'ai un problème pour lequel j'ai besoin d'aide. Je suis supposé créer une fonction qui calcule la distance entre deux positions. Les positions sont stockées dans deux tableaux, je peux utiliser autant de paramètres que je dois faire ce calculFonction qui calcule différentes positions à partir d'un tableau C#

static double[] Latitudes = new double[] { 
    59.3261917, 57.7010496, 59.8939529, 65.5867395, 60.11021, 52.5069312, 48.859 
}; 

static double[] Longitudes = new double[] { 
    17.7018773, 11.6136602, 10.6450348, 22.0422998, 24.7385057, 13.1445521, 2.2069765 
}; 

m'a donné une équation qui me permettra de calculer la distance

distance = Math.sqrt((x1 - x2)2 + (y1 - y2)2 ) 

Mon problème est que je ne peux pas obtenir les éléments des tableaux aux variables à l'intérieur de la fonction

+2

pourquoi? qu'avez-vous essayé? – Rahul

+0

Lesquels souhaitez-vous calculer? Tous les deux paires ou spécifiques? – FCin

+0

@FCin Il est supposé être spécifique, donc Latitudes [0] est lié avec Longitudes [0] – Chris

Répondre

1

Afficher dictance pour toutes les paires

if (Latitudes.Length == Longitudes.Length) 
{ 
    for (int i = 0; i < Latitudes.Length - 1; i = i + 2) 
    { 
     double x1 = Longitudes[i]; 
     double x2 = Longitudes[i + 1]; 
     double y1 = Latitudes[i]; 
     double y2 = Latitudes[i + 1]; 
     double distance = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2)); 

     Console.WriteLine($"x1 = {x1}; x2 = {x2}; y1 = {y1}; y2 = {y2}; distance {distance}"); 
    } 
} 
2

Eh bien, vous devez d'abord décider quelles positions vous voulez comparer. Cela serait fait par index. Supposons que vous voulez comparer les positions à l'indice 0 avec les positions à l'indice 2. Ensuite, le code pour obtenir les variables correctes serait:

double x1 = Latitudes[0]; 
double y1 = Longitudes[0]; 
double x2 = Latitudes[2]; 
double y2 = Longitudes[2]; 

Vous pouvez ensuite insérer ces valeurs dans votre fonction. Votre code de fonction est erroné et ne sera pas compilé. L'appel correct pour la fonction serait:

double distance = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2)); 

Dans l'intérêt de fournir une fonction plus complète pour votre classe, et en gardant à l'esprit que vos tableaux sont statiques, cela vous permettra d'obtenir la distance à partir de deux points donnés basés sur l'index. Je pense aussi que c'est un devoir si je me penche vers votre exigence à la création d'une fonction similaire:

double CalculateDistance(int index1, int index2) 
{ 
    double x1 = Latitudes[index1]; 
    double y1 = Longitudes[index1]; 
    double x2 = Latitudes[index2]; 
    double y2 = Longitudes[index2]; 

    return Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2)); 
} 

Vous pouvez ensuite appeler cette fonction comme suit:

double distance = CalculateDistance(0, 2); 
+0

c'est quelque chose de très basique ...Je ne vais pas me plaindre de votre réponse mais je ne publierai pas de réponse pour – Rahul

+0

@Rahul: Vous avez raison, c'est basique, mais c'est une question valide. Peut-être y a-t-il un doublon et peut-être que cela devrait être le bon plan d'action, mais j'aime que le PO ait montré un code et posé une question claire. C'est une rareté bien accueillie pour les utilisateurs de ces bas rep. – musefan

+0

Je pense que cela répond à la question aussi. mais je ne suis pas sûr que OP l'utilisera facilement. – Pac0

2

méthodes d'extraction, vous divisez problème en mineur: les

// Initial step: 
// Distance between points 
private static double Distance(double x1, double y1, double x2, double y2) { 
    return Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); 
} 

// Next step: 
// Distance between points given as arrays' items indexes 
private static double Distance(double[] xs, double[] ys, int indexFrom, indexTo) { 
    return Distance(xs[indexFrom], ys[indexFrom], xs[indexTo], ys[indexTo]); 
} 

Utilisez ensuite

// What is the distance between 0-th and 2-nd point? 
double result = Distance(Latitudes, Longitudes, 0, 2); 

Console.WriteLine(result); 

// What is the distance between all the points? 
for (int from = 0; from < Math.Min(Latitudes.Length, Longitudes.Length); ++from) 
    for (int to = from + 1; to < Math.Min(Latitudes.Length, Longitudes.Length); ++to) { 
    Console.WriteLine($"Distance from item #{from} to item #{to} is {Distance(Latitudes, Longitudes, from, to)}"); 
    } 
+0

Je pense que c'est probablement un peu OTT pour cette question et ne fera qu'ajouter à la confusion de l'OP (il est clair qu'ils sont au niveau de base ici), mais il est correct et il serait aussi ma préférence personnelle pour séparer la logique en fonctions courtes – musefan