Решение задачи Дуга на сфере с Меньшиков

Без пояснения   Просмотров: 23


На поверхности планеты, являющейся шаром радиусом R, заданы две точки своими широтой и долготой. Найти минимальную длину пути по поверхности этой планеты из одной точки в другую.


Код

#include <iostream>
#include <cmath>
#include <cstdio>
 
using namespace std;
 
const double pi = 2 * acos(0.0);
struct point
{
    double x,y,z;
    double toRad(double alpha)
    {
        return alpha * pi / 180.0;
    }
    point(){}
    point(double R, double lat, double lon)
    {
        x = R * cos(toRad(lat)) * cos(toRad(lon));
        y = R * cos(toRad(lat)) * sin(toRad(lon));
        z = R * sin(toRad(lat));
    }
} A, B;
double R;
void input()
{
    double lat,lon;
    cin>>R;
    cin>>lat>>lon;
    A = point(R,lat,lon);
    cin>>lat>>lon;
    B = point(R,lat,lon);
}
double dist(point const &a, point const &b)
{
    return sqrt((a.x - b.x) * (a.x - b.x) +
                (a.y - b.y) * (a.y - b.y) +
                (a.z - b.z) * (a.z - b.z));
}
void solve()
{
    double D = dist(A,B);
    double alpha = 2 * asin(D / 2 / R);
    double len = alpha * R;
    printf("%0.2f",len);
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
 
    input();
    solve();
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться