Calcul de navigation

Modérateur : Admin bis

Avatar de l’utilisateur
limelight
Joueur
Messages : 733
Inscription : 22 août 2019 10:15
Localisation : Melbourne, Australia
Contact :

Re: Calcul de navigation

Message par limelight » 13 oct. 2019 09:28

Pour le cas des waypoints, le problème est différent car on a les coordonnées des deux points et il faut trouver le cap et la distance loxodromique. Voici comment je le fais dans mon calculateur sur le web.

lat1 et lon1 sont les coordonnées du premier point
lat2 et lon2 sont celle du deuxième point, j'assume que ces valeurs sont converties en radians

On veut la distance et le cap de 1 vers 2

Il nous faut dlon = lon1 - lon2, mais là il y a un piège subtil qui arrive si les distances sont très grandes (je sais je suis tombé dedans :) )
Il faut limiter dlon entre -PI et + PI. Sur ma page web je le fais avec la fonction normalise() que voici:


/***************************************************************
* Function to convert a difference of radians to +/- pi
* The result is equal to x but from -pi to +pi
* Function added for Version 1.3
****************************************************************/
function normalise(x){
x = x % (2*pi) ; // difference modulo 2*pi
if (x < 0) x += 2*pi; // rendre l'angle positif
if (x > pi) x -= 2*pi; // Set dlon between -pi to +pi regime

return x;
}

donc dlon = normalise(lon1 - lon2)

J'ai aussi les signes des latitudes comme variables
las1 = 1 si la latitude du point 1 est au nord et -1 si elle est au sud
las2 = 1 si la latitude du point 2 est au nord et -1 si elle est au sud

Ensuite si lat1 n'est pas égal à lat2:

cap = atan( dlon /( las1*acosh(1/cos(lat1)) - las2*acosh(1/cos(lat2))))

et comme la tangente a deux possibilités vérifier s'il faut ajouter PI
:
if (lat2 < lat1) cap += pi;
la distance est:

dist = 60*180 /pi * ABS((lat2 -lat1)/cos(cap)) // distance en milles nautiques


Mais si lat2 == lat1 on fait autrement:

if (lon1 > lon2) {
cap = -pi/2 ;
} else {
cap = pi/2;
}
dist = 60*180 / pi * ABS( dlon * cos(lat1)) ; // en milles nautiques

Et finalement pour mettre le cap de 0 à 360

if ( cap < 0) cap += 2*pi

cap = cap * 180 /pi

Le piège dont je parlais est que pour joindre 2 points sur la projection Mercator avec une ligne droite (définition du loxodrome) on a plusieurs solutions (une infinité en fait) mais ce qu'on veut c'est la plus courte solution, or mon calculateur marchait très bien jusqu'au jour où quelqu'un a voulu traverser l'antiméridien du Japon jusqu'à San Francisco et mon programme l'a envoyé à travers la Russie. C'était mathématiquement correct mais pas ce qu'il voulait. D'où la fonction normalise() que j'ai ajouté en 2013.
Check https://madinstro.net/rg/ for handy navigation tools.

Fraenéon
Joueur
Messages : 243
Inscription : 02 sept. 2019 12:31
Localisation : Lesconil
Contact :

Re: Calcul de navigation

Message par Fraenéon » 15 oct. 2019 13:52

Bonjour,

Je ne sais pas si je suis au bon endroit,
mais je viens de constater en rentrant de déjeuner que ma prog validée ne correspond en rien
avec la trajectoire effectuée réellement par mon bateau...
C'est pour le coup très"déroutant"....
...Heureusement que la"bacahau a braz"de chez Fernando était divine...

Avatar de l’utilisateur
blzblz
développeur
Messages : 3011
Inscription : 16 oct. 2014 21:05
Contact :

Re: Calcul de navigation

Message par blzblz » 15 oct. 2019 14:09

J'ai créé un nouveau sujet ici:
"Rapportez les bugs" / "Le programmateur" / "prog non prise en compte"
viewtopic.php?f=20&t=1821

Avatar de l’utilisateur
limelight
Joueur
Messages : 733
Inscription : 22 août 2019 10:15
Localisation : Melbourne, Australia
Contact :

Re: Calcul de navigation

Message par limelight » 04 oct. 2020 22:58

Bon, avec tous les changements qui ont l'air de bien marcher, le seul 'gros' bug qui reste est l'erreur de distance/vitesse sur le loxodrome qui a été discuté entre Blaise, moi et Zedstar l'année dernière. Aucune idée du programme pour la corriger Blaise?

A part ça le jeu est parfait!
Check https://madinstro.net/rg/ for handy navigation tools.

Répondre

Revenir à « Rapportez les bugs »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités