Нахождение дистанции на C# 🌍
Nomon
Posted on October 15, 2024
Введение
- В этом посте я покажу, как сделать это с помощью C# и формулы гаверсина, одного из популярных способов расчета расстояния между двумя точками на поверхности Земли.
Что такое формула гаверсина?
- Формула гаверсина используется для вычисления большой окружности — кратчайшего расстояния между двумя точками на поверхности сферы, в нашем случае — Земли. В отличие от простого "расстояния по прямой линии", эта формула учитывает кривизну Земли и поэтому дает более точные результаты при вычислении расстояний на большие расстояния (например, между городами или странами).
- Формула принимает в качестве входных данных широту и долготу двух точек и вычисляет расстояние между ними.
Как это работает в C#?
Ниже приведен код, который можно использовать для расчета расстояния между двумя географическими координатами (широта и долгота):
namespace day1{
class Program (){
static void Main(string[] args){
// Запрашиваем ввод у пользователя
Console.Write("Введите широту первой точки (например, вашего города): ");
double lat1 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите долготу первой точки: ");
double lon1 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите широту второй точки (например, другого города): ");
double lat2 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите долготу второй точки: ");
double lon2 = Convert.ToDouble(Console.ReadLine());
// Здесь вычисляем расстояние
Distance distanceCalculator = new Distance();
double distance = distanceCalculator.HaversineDistance(lat1, lon1, lat2, lon2);
// Выводим результат
Console.WriteLine($"Расстояние между точками: {distance:F2} километров.");
}
}
}
namespace day1{
class Distance{
const double EarthRadiusKm = 6371.0;
public double HaversineDistance(double lat1, double lon1, double lat2, double lon2){
// Переводим градусы в радианы, чтобы программа могла их использовать
double dLat = DegreesToRadians(lat2 - lat1);
double dLon = DegreesToRadians(lon2 - lon1);
// Теперь используем формулу для расчета расстояния
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
Math.Cos(DegreesToRadians(lat1)) * Math.Cos(DegreesToRadians(lat2)) *
Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
// Возвращаем результат — расстояние в километрах
return EarthRadiusKm * c;
}
// Этот метод просто переводит градусы в радианы
static double DegreesToRadians(double degrees){
return degrees * Math.PI / 180;
}
}
}
Объяснение кода
- Ввод данных: Программа запрашивает у пользователя ввод широты и долготы двух точек. Формула гаверсина:
- Мы используем формулу гаверсина для вычисления расстояния, чтобы учесть кривизну Земли. Вывод результата:
- После вычислений программа выводит результат — расстояние между двумя точками в километрах.
Как это работает?
- Мы конвертируем широту и долготу из градусов в радианы, так как многие математические функции работают с радианами.
- Затем используем саму формулу гаверсина для вычисления большого окружного расстояния между двумя точками на сфере. В конце программа возвращает результат в километрах.
Если у вас есть вопросы или предложения по улучшению программы, обязательно оставляйте комментарии!
💖 💪 🙅 🚩
Nomon
Posted on October 15, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
csharp Mastering Error Handling in ASP.NET Core 9.0: Advanced Strategies for Robust Applications
November 26, 2024
csharp Old-School Graphics in C# / .Net 8, Part 2: Fireworks and Advanced Vector Extensions (AVX, SSE)
November 20, 2024