PROG0393 - Great-circle navigation

no tags 

Een grootcirkel is een cirkel op een boloppervlak waarvan de straal gelijk is aan de straal van de bol. Dit betekent ook dat het middelpunt van alle grootcirkels samenvalt met het middelpunt van de bol. De kortste verbinding tussen twee punten op een bol, gemeten over het boloppervlak, is altijd een deel van een grootcirkel. De afstand over deze kortste verbinding wordt de grootcirkelafstand genoemd.

grootcirkel
Een grootcirkel verdeelt de bol in twee gelijke hemisferen.

Zo vaart een transatlantisch schip van Southhampton, Engeland naar New York, USA niet over een oost-west breedtegraad — wat op veel wereldkaarten de kortste route lijkt (o.a. bij een Mercatorprojectie) — maar over de grootcirkel die door beide plaatsen loopt. Deze grootcirkel loopt relatief hoog (noordelijk) over de Atlantische oceaan. Onderstaande kaart toont initieel het deel van de grootcirkel dat de kortste afstand vormt tussen Southhampton en New York. De eindpunten kun je naar willekeur verslepen.

 

De grootcirkelafstand $d$ tussen twee punten op een bol kan berekend worden met behulp van de volgende formule $$d = r \cdot \arccos(\sin(x_1) \cdot \sin(x_2) + \cos(x_1)\cdot \cos(x_2) \cdot \cos(y_1 - y_2))$$ Hierbij zijn $(x_1, y_1)$ en $(x_2, y_2)$ de lengte- en breedtegraden van beide punten (gegeven in decimale graden), en is $r$ de straal van de bol waarop de afstand berekend moeten worden.

Bij deze opgave nemen we aan dat de Aarde bolvormig is met straal $r = 6371\mbox{ km}$. Ondanks het feit dat de Aarde geen perfecte bol is, geeft de formule voor de grootcirkelafstand op Aarde toch een benadering die correct is tot op $0.5\%$.

Voorbereiding

Om deze opgave op te lossen heb je functies uit de math module nodig. Deze functies zijn niet standaard beschikbaar voor Python, maar ze kunnen ingeladen worden door het volgende statement bovenaan je programmacode te plaatsen.

import math

Welke functies er allemaal voorhanden zijn in de math module kan je bekijken door de volgende commando's uit te voeren in een interactieve Pythonsessie.

>>> import math
>>> help(math)

Het is ook altijd een goed idee om de online documentatie van de Standard Python Library te raadplegen. Daaruit leer je bijvoorbeeld dat de sinus van $\frac{\pi}{2}$ op de volgende manier kan berekend worden.

>>> import math
>>> math.sin(math.pi / 2)
1.0

Merk op dat alle goniometrische functies in de math module werken met hoeken die uitgedrukt zijn in radialen. De lengte- en breedtegraden moeten dus omgezet worden naar radialen, maar daarvoor bestaat ook een functie in de math module. Aan jou de opdracht om die functie op te zoeken.

Invoer

De invoer bestaat uit 4 reële getallen $x_1$, $y_1$, $x_2$ en $y_2$, elk op een afzonderlijke regel, waarbij $(x_1, y_1)$ en $(x_2, y_2)$ respectievelijk de lengte- en breedtegraden van twee punten op Aarde voorstellen.

Uitvoer

Een omschrijving die de grootcirkelafstand (in kilometer) tussen beide punten op Aarde aangeeft. De grootcirkelafstand moet hierbij afgerond worden naar het dichtste natuurlijk getal.

Voorbeeld

Invoer:

48.87
-2.33
37.80
122.40

Uitvoer:

De grootcirkelafstand bedraagt 8948 km.


Added by:Peter Dawyndt
Date:2013-06-03
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None