VB6 Conversion DMS en Décimal

Signaler
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
36
Date d'inscription
vendredi 5 octobre 2001
Statut
Membre
Dernière intervention
6 février 2009
-
Salut à tous....

J'ai déjà posé quelques questions sur ce problème.... Et je croyais avoir saisi....
Cela fais plus de 30 minutes que je regarde avec mon patron et on ne résussi pas à trouver pourquoi ca ne fonctionne pas....

Je veux pour cet exemple transformer 268 Degré 50 Minute et 27 Seceonde en décimal... MAIS... pour cela je dois faire certain calcul.....   Je sais que 268,8408333 est mon résultat final.

Ce résultat est possible à partie de coordonnées géographique que j'ai placé dans des Label

Voici mon Code et je mais en rouge les valeur de certaine variable

Mes variables sont tous des Double

    Pi = 3.14159265358979
    dbRadian = (180 / Pi) 'Ici je me demande si c'est OK
    X1 = lblStationCoordX.Caption '-5.27806068619312
    X2 = lblBackCoordX.Caption   ' 21.1446186767566
    Y1 = lblStationCoordY.Caption ' -66.2255826051614
    Y2 = lblBackCoordY.Caption   ' 19.9112606845735
        dX X2 - X1 ' dX -60.947521918968    dY Y2 - Y1 ' dY -1,2333579921831
   
 '***********************************************************************
'Formule pour connaître le cadrant dans lequel se trouve les coordonnées
    If dX >= 0 And dY >= 0 Then
        aTan1 = (Atn(dX / dY)) '* dbRadian


    ElseIf dX >= 0 And dY < 0 Or dX < 0 And dY < 0 Then
        aTan1 = (Atn(dX / dY) + Pi) '* dbRadian


    ElseIf dX < 0 And dY >= 0 Then
        aTan1 = (Atn(dX / dY) + (2 * Pi)) '* dbRadian


    End If  
'*********************************************************************   aTan2 = aTan1 * dbRadian 'Convertir les Radians en Degrés décimaux

PROBLÈME

aTan2 = 268.84069833333

Mais je devrais arriver à 268.8408333

Si quelqu'un peut m'aider à trouver d'où vient mon problème....

Merci d'avance....

S'il y a quelque chose de pas clais  gênez-vous pas... 

6 réponses

Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
12
vous avez pas l'impression de vous compliquer la vie ?

Public Function conv_dmsToDeg(d As Integer, m As Integer, s As Integer) As Double
conv_dmsToDeg = d + (m + s / 60) / 60
End Function

BasicInstinct
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
En cherchant Covertion DMS = > Decimal sur google
j ai trouve une fonction (sur le site de MICROSOFT s il vous plait)
Not: Il y a aussi Decimal => DMS

je l'ai essayer et le résultat pour 268°50'27'' est 268.001944444444

Alors je ne sais pas comment faire pour avoir un résultat juste
Function Convert_Decimal(Degree_Deg As String) As Double 
   ' Declare the variables to be double precision floating-point.
   Dim degrees As Double 
   Dim minutes As Double 
   Dim seconds As Double 
   ' Set degree to value before "°" of Argument Passed.
   degrees =  Val (Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1)) 
   ' Set minutes to the value between the "°" and the "'"
   ' of the text string for the variable Degree_Deg divided by
   ' 60. The Val function converts the text string to a number.
   minutes  = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _ 
             InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _ 
             "°") - 2)) / 60 
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds =   Val (Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _ 
            2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2)) _ 
            / 3600 
   Convert_Decimal  = degrees + minutes + seconds 
End Function 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
>BasicInstinct: Effectivement vu comme ca...

@+, Julien
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Salut à vous

BasicInstinct
et bien pour la conversion, ca va je fais une affaire a peu pres comme toi
dbConvertion = (((Secondes / 60) + Minutes) / 60) + Degres

et ca fonctionne....
 Le Prob est pourquoi dans mes calculs je n'arrive pas à la bonne réponse pour ma conversion...

jrivet
J'ai regarder que ton résulta soit 268°50'27'' est 268.001944444444
et c'est vraiment une erreur ce code... car 50 minute de ne pas donner 268.0019444
Je crois qu'il y a une tres belle erreur dans ce code,,, Mais pas grave merci d'avoir chercher...

 Le Prob est pourquoi dans mes calculs je n'arrive pas à la bonne réponse pour ma conversion...

Note: Je n'ai pas été clair dans mon message......  La conversion ca va...... Mais c'est plustot le calcul mathématique qui ne fonctionne pas et je ne réussi pas à arriver au bon résults en décimal...   soit 268.8408333 = 268°50'27''

merci encore
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je viens de me pencher sur ton calcul (j'ai failli en tomber dis donc ).

Je ne comprend pas d'ou tu sors tes différentes valeurs.

Avec les valeurs que tu donne pour x1, x2, y1 et y2, pour moi dx et dy sont positifs tous les deux.

De plus, avec les formules que tu donne pour dx et dy, ça veut dire que tu prend le point x1 comme référence.
Dans ce cas je trouverais un angle aux alentours de 72°.

j'ai essayer de tracer cela sur un morceaux de papier, 72° me va très bien. Par contre 268° non.

Je laisse tomber parceque je ne comprend pas garnd chose à la trigo, je suis surrement dans l'erreur.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
36
Date d'inscription
vendredi 5 octobre 2001
Statut
Membre
Dernière intervention
6 février 2009

Salut JeffC1977,

En fait la fonction sur le site de Microsoft fonctionne correctement.

Simplement, il faut mettre une espace après °, ' et ""
Ou alors tu transforme la fonction comme tel

Function Convert_Decimal(Degree_Deg As String) As Double
   ' Declare the variables to be double precision floating-point.
   Dim degrees As Double
   Dim minutes As Double
   Dim seconds As Double
   ' Set degree to value before "°" of Argument Passed.
   degrees = Val(Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1))
   ' Set minutes to the value between the "°" and the "'"
   ' of the text string for the variable Degree_Deg divided by
   ' 60. The Val function converts the text string to a number.
   minutes = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 1, _
             InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, "°") - 1)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
            1, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 1)) / 3600
   Convert_Decimal = degrees + minutes + seconds
End Function