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

Анализ метода расчета направления движения автомобиля на C#

Этот пример анализирует метод расчета направления движения автомобиля на языке программирования C#. Предлагается для вашего рассмотрения, подробности см. ниже:

1. Сценарий: Известны два GPS-координаты движения автомобиля в процессе его движения A (n1, e1), B (e), необходимо вычислить его направление движения.

2. Анализ: как показано на рисунке, зная два пункта A, B, можно предположить точку C, чтобы три точки образовывали прямоугольный треугольник. Теперь легко можно вычислить GPS-координаты точек A, B, C и длину катетов a, b, c. В соответствии с теоремой косинусов CosB = (a^2 + c^2 - b^2) / (2ac), можно вычислить значение CosB.

3. Реализация на C#.

/// <summary>
/// Вычисление расстояния между двумя GPS-координатами
/// </summary>
/// <param name="n1">Широта первого координаты</param>
/// <param name="e1">Долгота первого координаты</param>
/// <param name="n2">Широта второго координаты</param>
/// <param name="e2">Долгота второго координаты</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>
/// Известны два GPS-координаты движения автомобиля, необходимо определить его направление движения
/// </summary>
/// <param name="n1">Первый GPS-координаты широты</param>
/// <param name="e1">Первый GPS-координаты долготы</param>
/// <param name="n2">Второй GPS-координаты широты</param>
/// <param name="e2">Второй GPS-координаты долготы</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;
  если ((a * c) != 0)
  {
 cosB = (a * a + c * c - b * b) / (2 * a * c);
  }
  double B = Math.Acos(cosB) * 180 / Math.PI;
  если (n2 < n1)
  {
 B = 180 + (180 - B);
  }
  возврат B;
}

Для тех, кто интересуется дополнительной информацией о C#, можно проверить темы на этом сайте: "Суммирование навыков работы с строками в C#", "Суммирование навыков работы с массивами в C#", "Обобщение навыков работы с XML-файлами в C#", "Обобщение учебников по использованию常见控件 в C#", "Обобщение навыков использования потоков в C#", "Обобщение навыков работы с Excel в C#", "Обобщение учебников по использованием WinForm控件", "Учебники по структурам данных и алгоритмам в C#" и "Введение в объектно-ориентированное программирование на C#".

Надеюсь, что информация, изложенная в этой статье, поможет вам в программировании на C#.

Заявление: содержимое этой статьи взято из интернета, авторские права принадлежат соответствующему автору, контент был предоставлен пользователями интернета, сайт не имеет права собственности, не был обработан вручную и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для жалоб и предоставьте соответствующие доказательства. В случае подтверждения, сайт немедленно удалят涉嫌侵权的内容。

Рекомендуем также