Je suis en train d'implémenter un outil de conversion
de coordonnées géographiques au format WGS84
(données issues d'un GPS Garmin) vers le format
UTM.
J'ai trouvé sur le site de l'IGN tous les outils et autres
algorithmes de conversion.
Cependant, j'arrive à la dernière étape et je sèche
car je dois, à priori, résoudre une équation avec des
nombres complexes !
Voici l'algorithme utilisé :
C = c(e) e est une constante, c(e) est une fonction
que j'ai réussi à implémenter. On obtient un tableau
de C1 à C5
L = L(Phi, e) : Phi est la latitude (en radians), L(a,b)
est une fonction que j'ai réussi à implémenter.
Teta = arcsin(sin(Lambda - LambdaC)/(ch(L)) : LambdaC
est une constante, Lambda est la longitude (radians)
Ls = L(Teta, 0) : on utilise à nouveau la fonction L(a,b)
Delta = arctan (sh(L) / (cos(Lambda - LambdaC))
Et maintenant, c'est là que je coince :
PetitZ = Delta + i * Ls (i^2 = -1)
GrandZ = n*C1*PetitZ + n*C2*sin(2 * k * PetitZ) +
n*C3*sin(2 * k * PetitZ) + n*C4*sin(2 * k * PetitZ) +
n*C5*sin(2 * k * PetitZ)
X = Im(GrandZ)
Y = Re(GrandZ)
Voilà, je ne sais pas comment calculer PetitZ, ni Im(GrandZ) ni
Re(Z).
J'ai besoin de programmer cet algorithme en Visual Basic !!!
>Bonjour,
>
>Je suis en train d'implémenter un outil de conversion
>de coordonnées géographiques au format WGS84
>(données issues d'un GPS Garmin) vers le format
>UTM.
>
>J'ai trouvé sur le site de l'IGN tous les outils et autres
>algorithmes de conversion.
>
>Cependant, j'arrive à la dernière étape et je sèche
>car je dois, à priori, résoudre une équation avec des
>nombres complexes !
>
>Voici l'algorithme utilisé :
>
>C = c(e) e est une constante, c(e) est une fonction
>que j'ai réussi à implémenter. On obtient un tableau
>de C1 à C5
>
>L = L(Phi, e) : Phi est la latitude (en radians), L(a,b)
>est une fonction que j'ai réussi à implémenter.
>
>Teta = arcsin(sin(Lambda - LambdaC)/(ch(L)) : LambdaC
>est une constante, Lambda est la longitude (radians)
>
>Ls = L(Teta, 0) : on utilise à nouveau la fonction L(a,b)
>
>Delta = arctan (sh(L) / (cos(Lambda - LambdaC))
>
>
>
>Et maintenant, c'est là que je coince :
>
> PetitZ = Delta + i * Ls (i^2 = -1)
>
>
>
>
>GrandZ = n*C1*PetitZ + n*C2*sin(2 * k * PetitZ) +
> n*C3*sin(2 * k * PetitZ) + n*C4*sin(2 * k * PetitZ) +
> n*C5*sin(2 * k * PetitZ)
>
>
>
>X = Im(GrandZ)
>Y = Re(GrandZ)
>
>
>
>
>Voilà, je ne sais pas comment calculer PetitZ, ni Im(GrandZ) ni
>Re(Z).
>
>J'ai besoin de programmer cet algorithme en Visual Basic !!!
>
>Quelqu'un peut-il m'aider ?
>
>Merci d'avance,
>
>Vincent BENNER
>Contact : 03 80 66 29 04
>
Un nombre complexe a une partie réelle et une partie imaginaire, qu'on
écrit a+i*b. Par example, pour le complexe PetitZ, la partie réelle
est Delta, et Ls est la partie imaginaire. Le '+' est là juste comme
notation, ce n'est pas vraiment une addition.
Alors pour calculer GrandZ, il faut les opérations +, * et la fonction
sinus complexe, ceci devrait etre suffisant (contactez moi par email
si vous avez besoin de plus d'explications):
'--------------------
Option Explicit
Type Complexe
re As Double
im As Double
End Type
' Cosinus hyperbolique avec argument réel
Public Function Cosh(a As Double)
Cosh = (Exp(a) + Exp(-a)) / 2
End Function
' Sinus hyperbolique avec argument réel
Public Function Sinh(a As Double)
Sinh = (Exp(a) - Exp(-a)) / 2
End Function
' Additionner 2 complexes
Public Function AddComplexe(a As Complexe, b As Complexe) As Complexe