English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Этот пример анализирует метод расчета направления движения автомобиля на языке программирования 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 (во время отправки письма замените # на @) для жалоб и предоставьте соответствующие доказательства. В случае подтверждения, сайт немедленно удалят涉嫌侵权的内容。