English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Analisi del metodo di calcolo della direzione di marcia dell'auto in C#

Questa guida analizza il metodo di calcolo della direzione di marcia dell'auto in C#. Condivido con voi per riferimento, come segue:

1. Scenario: Given two GPS coordinate points A (n1, e1), B (e) during the car's travel, calculate the direction of its travel.

2. Analysis: As shown in the figure above, knowing two points A, B, we can assume a point C, so that the three points form a right triangle. Now it is easy to find the GPS coordinates of points A, B, C, and calculate the lengths of the sides a, b, c of the three angles. According to the cosine rule, CosB = (a^2 + c^2 - b^2) / (2ac), the value of CosB can be calculated.

3. C# implementation code.

/// <summary>
/// Calculate the distance between two GPS coordinates
/// </summary>
/// <param name="n1">Latitude coordinate of the first point</param>
/// <param name="e1">Longitude coordinate of the first point</param>
/// <param name="n2">Latitude coordinate of the second point</param>
/// <param name="e2">Longitude coordinate of the second point</param>
/// <returns></returns>
public static double Distance(double n1, double e1, double n2, double e2)
{
  double jl_jd = 102834.74258026089786013677476285;
  double jl_wd = 111712.69150641055729984301412873;
  double b = Math.Abs((e1 - e2) * jl_jd);
  double a = Math.Abs((n1 - n2) * jl_wd);
  return Math.Sqrt((a * a + b * b));
}
/// <summary>
/// Find the direction of the car's travel based on two known GPS points of the car
/// </summary>
/// <param name="n1">First GPS point latitude</param>
/// <param name="e1">First GPS point longitude</param>
/// <param name="n2">Second GPS point latitude</param>
/// <param name="e2">Second GPS point longitude</param>
/// <returns></returns>
public static double GetBusDirection(double n1, double e1, double n2, double e2)
{
  double e3 = 0;
  double n3 = 0;
  e3 = e1 + 0.005;
  n3 = n1;
  double a = 0;
  double b = 0;
  double c = 0;
  a = Distance(e1, n1, e3, n3);
  b = Distance(e3, n3, e2, n2);
  c = Distance(e1, n1, e2, n2);
  double cosB = 0;
  if ((a * c) != 0)
  {
 cosB = (a * a + c * c - b * b) / (2 * a * c);
  }
  double B = Math.Acos(cosB) * 180 / Math.PI;
  if(n2 < n1)
  {
 B = 180 + (180 - B);
  }
  return B;
}

Per coloro che sono interessati a ulteriori contenuti relativi a C#, possono consultare le sezioni speciali di questo sito: 'Concetti di manipolazione delle stringhe in C#', 'Concetti di manipolazione degli array in C#', 'Concetti di manipolazione dei file XML in C#', 'Tutorial sui controlli comuni in C#', 'Concetti di utilizzo dei thread in C#', 'Concetti di manipolazione di Excel in C#', 'Concetti di utilizzo dei controlli WinForm', 'Tutorial sui dati e sulle strutture di algoritmi in C#', 'Tutorial di programmazione orientata agli oggetti in C# per principianti'

Spero che questo articolo possa essere utile per la progettazione di programmi C# di tutti.

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare