Calcul [Résolu]

Messages postés
863
Date d'inscription
samedi 11 juin 2005
Dernière intervention
21 août 2015
- - Dernière réponse : marinmarais
Messages postés
106
Date d'inscription
lundi 11 avril 2005
Dernière intervention
16 juillet 2010
- 31 août 2009 à 14:14
Salut !

Je suis arrivé à une formule que je ne comprends pas.

* A = Différence de longitudes entre un Point1 et le lieu Point2 ;
* B = Latitude du Point2 ;
* C = Latitude du Point1 .

Avec un langage de programmation ayant une fonction atan2
Q  = atan2(cos(B).tan(C) - sin(B).cos(A), sin(A))

On obtient le bon résultat directement

Je n'arrives pas a le convertir en VB6. Il est important pour moi de savoir le faire sinon je n'ai qu'a jeter mon programme. J'ai vraiment besoin de votre aide.
Pourriez-vous m'aider svp ?

Merci

----------
OS : Windows XP SP3 et Vista 32
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
3
Merci
Ca c'est mieux :
Private Sub Timer1_Timer()
 'Q = atan2(Cos(B).Tan(C) - Sin(B).Cos(A), Sin(A))
 Text4.Text = atan2(Cos(Text2.Text) * Tan(Text3.Text) - Sin(Text2.Text) * Cos(Text1.Text), Sin(Text1.Text))
End Sub

---
VB.NET is good ... VB6 is better

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_ghuysmans99
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,

google : atan2 vb6
http://forums.devx.com/archive/index.php/t-69063.html
[hr]
Commenter la réponse de PCPT
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
J'allais donner le même lien que PCPT.
Donc pour convertir ton code il te suffit maintenant de remplacer les points par des astérisques.

---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Dernière intervention
21 août 2015
0
Merci
Salut et merci

Donc ca me fera ca ? :
Private Const pi As Double = 3.14159265358979

Public Function atan2(y As Double, x As Double) As Double
If x > 0 Then
atan2 = Atn(y / x)
ElseIf x < 0 Then
atan2 = Sgn(y) * (pi - Atn(Abs(y / x)))
ElseIf y = 0 Then
atan2 = 0
Else
atan2 = Sgn(y) * pi / 2
End If
End Function

Private Sub Timer1_Timer()
'Q = atan2(Cos(B).Tan(C) - Sin(B).Cos(A), Sin(A))
Text4 = atan2(Cos(Text2) * Tan(Text3) - Sin(Text2) * Cos(Text1), Sin(Text1))
End Sub


Ca me donne un résultat mais je ne sais pas s'il est juste. Mais le code est juste là ?
Commenter la réponse de Sinsitrus
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Dernière intervention
21 août 2015
0
Merci
Encore merci a tous les deux ! Sauvé !
Grand merci encore !
Commenter la réponse de Sinsitrus
Messages postés
106
Date d'inscription
lundi 11 avril 2005
Dernière intervention
16 juillet 2010
0
Merci
Salut,

Je vais tenter de t'aider un peu car ce genre de calcul de trigonometrie spherique m'arrive (malheureusement ?) assez souvent.

D'abord qu'est-ce que tu veux calculer ? Qu'est-ce que c'est ?
La distance zenithale de 1 vers 2, l'azimut ?

D'autre part, je ne comprends pas ta formule :
Q = atan2(cos(B).tan(C) - sin(B).cos(A), sin(A))
A quoi correspond la virgule ? C'est une faute de frappe ?

En regardant mes cours de geodesie, il semblerait que Q soit l'azimut de 1 vers 2.
J'ai trouve quelque chose qui y ressemble, mais ce n'est pas tout a fait la meme chose. La formule dont je dispose est :

-sin(A)*cotan(Q)=cos(B)*tan(C)-sin(B)*cos(A)
cotan est la fonction cotangente.
c'est-a-dire :
Q = atan(sin(A)/(sin(B)*cos(A)-cos(B)*tan(C)))

J'espere que ca va t'aider...

Bon courage,
Thomas.

Marin Marais
Commenter la réponse de marinmarais
Messages postés
106
Date d'inscription
lundi 11 avril 2005
Dernière intervention
16 juillet 2010
0
Merci
Et quant au calcul de l'arctangente, il y a une formule beaucoup plus simple pour que le resultat soit compris entre 0 et 2*pi :

Si a :
tan(theta)=y/x
Soit D=(x^2+y^2)^0.5 (c'est-a-dire x^2+y^2 a la racine carre)
alors :
theta=2*atan(y/(D+x))
et enfin, pour eviter des valeurs negatives :
theta=theta mod 2*pi

Ca se demontre aisement avec les proprietes des angles au centre d'un cercle.
Ca marche dans tous les cas et on a pas a se coltiner des calculs de signes.
C'est une vieille astuce de topographe...

Voili voilou.

Marin Marais
Commenter la réponse de marinmarais
Messages postés
106
Date d'inscription
lundi 11 avril 2005
Dernière intervention
16 juillet 2010
0
Merci
Voila, selon moi, ca ressemberait a ca :

Private Const pi as Double = 3.14159265358979
Private Sub Azimut()

' Declaration des variables
Dim a as Double
Dim b as Double
Dim c as Double
Dim d as Double
Dim q as Double
Dim x as Double
Dim y as Double

' a est la difference de longitude entre 1 et 2
' b est la latitude de 1
' c est la latitude de 2
a = Text1.Text
b = Text2.Text
c = Text3.Text

' calcul de l'azimut q
y = sin(a)
x = sin(b) * cos(a) - tan(c) * cos(b)
d = (x ^ 2 + y ^ 2) ^ 0.5
q = 2 * Atn(y / (d + x))
q = q mod 2 * pi
Text4.Text = q

End Sub


Marin Marais
Commenter la réponse de marinmarais

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.