Posté le 23/07/2015 à 21:05 Membre depuis le 11/06/2001, 19563 messages
Est-ce que quelqu'un connaitrait une fonction norme efficace lorsqu'on a des coordonnées en longitude / latitude ?
Le problème est, je pense, de gérer les coordonnées autour des pôles.

J'ai bien une idée, mais je pense qu'elle n'est pas très efficace (convertir la position en coordonnées cartésiennes puis calculer la norme classique).

(En fait, je n'ai pas besoin de l'homogonéité)
Posté le 23/07/2015 à 21:12 Membre depuis le 27/04/2006, 60457 messages
Si tu convertis en coordonnées cartésiennes, tu auras la distance en ligne droite "euclidienne", autrement dit suivant un segment qui rentre à l'intérieur de la sphère au lieu de suivre le contour extérieur. J'imagine que ce n'est pas ce que tu veux.

Je pense que la formule qu'il te faut, c'est celle-là : https://en.wikipedia.org/wiki/Great-circle_distance
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 23/07/2015 à 21:14 Membre depuis le 10/06/2001, 45094 messages
Zerosquare > sur des petites distances ça peut passer (ou alors en interpolant des points pour discrétiser grin)

http://stackoverflow.com/questions/365826/calculate-distance-between-2-gps-coordinates ?
et donc http://www.movable-type.co.uk/scripts/latlong.html ?
Posté le 23/07/2015 à 21:16 Membre depuis le 27/04/2006, 60457 messages
(oui l'approximation est valide dans les conditions que tu cites, mais PpHd n'est pas un homme d'approximation ^^)
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 23/07/2015 à 21:18 Membre depuis le 10/06/2001, 45094 messages
(Dans ce cas la Terre n'est pas une sphère embarrassed)
Posté le 23/07/2015 à 21:21 Membre depuis le 27/04/2006, 60457 messages
(Il n'a pas parlé de Terre, ça pourrait être la latitude/longitude d'une planète extraterrestre parfaitement sphérique !)
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 23/07/2015 à 21:22 Membre depuis le 10/06/2001, 45094 messages
(Ou infiniment grande, et du coup elle est plate quand même embarrassed)
Posté le 23/07/2015 à 22:14 Membre depuis le 10/06/2001, 40258 messages
Il faut surtout savoir ce qui est demandé: une norme quelconque (qui remplit la définition de la norme et c'est tout)? Une norme quelconque compatible avec la topologie attendue (apparemment, au moins ça est nécessaire, sinon on n'aurait rien à faire des pôles tongue)? Une (ou plutôt, la, une fois choisie la distance) norme qui correspond à la distance réelle (laquelle?) entre les 2 points?
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 23/07/2015 à 22:36 Membre depuis le 11/06/2001, 19563 messages
Je précise qu'il me faut une norme quelconque (qui remplit juste 2 des 3 propriétés d'une norme) compatible avec la topologie attendue (à savoir que 2 points sont plus proches que 2 autres si et seulement leur norme est inférieure). Pas forcément la distante entre 2 points sur un grand cercle (mais je prends quand même, merci).
Posté le 23/07/2015 à 23:04 Membre depuis le 10/06/2001, 40258 messages
Attends, ce que tu cherches, n'est-ce pas plutôt une fonction distance (d(x,y), où 2 points x et y sont plus proches que 2 autres x' et y' si et seulement si d(x,y)<d(x',y')) qu'une norme (||u||, où 2 points x et y sont plus proches que 2 autres x' et y' si et seulement si ||y-x||<||y'-x'||) ? Parce que pour calculer y-x, tu auras déjà un problème avec les pôles avec le système de coordonnées polaire (latitude, longitude).
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 23/07/2015 à 23:29 Membre depuis le 11/06/2001, 19563 messages
oui
Posté le 23/07/2015 à 23:32 Membre depuis le 10/06/2001, 40258 messages
J'aurais une distance comme ça à proposer:
d((lat1,lon1), (lat2,lon2)) = min(π-lat1-lat2, π+lat1+lat2, max(|lat2-lat1|, min(|lon2-lon1|, |lon2-lon1+2π|, |lon2-lon1-2π|)))
où le premier terme est la distance sur la surface de la sphère en passant par le pôle nord, le deuxième terme est la distance sur la surface de la sphère en passant par le pôle sud, et le troisième terme est une norme maximum négligeant les pôles, mais est-ce que ça remplit la propriété que tu cherches (2 points x et y sont plus proches que 2 autres x' et y' si et seulement si d(x,y)<d(x',y'))? (À mon avis, ça risque de ne pas être le cas. En tout cas, il faudrait le prouver, ou alors redéfinir "proche". grin)

Si ce type de formule ne marche pas, alors je ne vois pas comment faire sans calculer la distance grand cercle ou la distance euclidienne.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 24/07/2015 à 11:24 Membre depuis le 11/06/2001, 19563 messages
Ca marche merci.
Par contre, je vais surement plutôt prendre https://en.wikipedia.org/wiki/Great-circle_distance car ta norme produit des résultats plus en dent de scie.
Posté le 24/07/2015 à 13:04 Membre depuis le 10/06/2001, 40258 messages
Oui, c'est le problème si on essaie d'éviter la trigonométrie. Et d'ailleurs il faudrait voir si tous ces min et max ne sont pas de toute façon plus coûteux que la trigonométrie avec le dédain des processeurs modernes pour les sauts.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 24/07/2015 à 13:11 Membre depuis le 10/06/2001, 40258 messages
D'ailleurs, l'écriture de ma formule peut être simplifiée en:
d((lat1,lon1), (lat2,lon2)) = min(π-|lat1+lat2|, max(|lat2-lat1|, min(|lon2-lon1|, |lon2-lon1+2π|, |lon2-lon1-2π|)))
(min(a-x,a+x)=a+min(-x,x)=a-|x| smile)
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 24/07/2015 à 17:34 Membre depuis le 11/06/2001, 19563 messages
./14: Non, ça reste 7.5x plus rapide.