1

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é)

2

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
avatar
Zeroblog

« 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

3

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 ?

4

(oui l'approximation est valide dans les conditions que tu cites, mais PpHd n'est pas un homme d'approximation ^^)
avatar
Zeroblog

« 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

5

(Dans ce cas la Terre n'est pas une sphère embarrassed)

6

(Il n'a pas parlé de Terre, ça pourrait être la latitude/longitude d'une planète extraterrestre parfaitement sphérique !)
avatar
Zeroblog

« 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

7

(Ou infiniment grande, et du coup elle est plate quand même embarrassed)

8

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?
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

9

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).

10

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).
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

11

oui

12

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

13

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.

14

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

15

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)
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

16

./14: Non, ça reste 7.5x plus rapide.