Calcul

Résolu
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 31 août 2009 à 02:23
marinmarais Messages postés 104 Date d'inscription lundi 11 avril 2005 Statut Membre 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 !

8 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 août 2009 à 11:27
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 août 2009 à 09:33
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 août 2009 à 10:42
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
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
31 août 2009 à 11:18
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à ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
31 août 2009 à 11:46
Encore merci a tous les deux ! Sauvé !
Grand merci encore !
0
marinmarais Messages postés 104 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 16 juillet 2010 1
31 août 2009 à 11:52
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
0
marinmarais Messages postés 104 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 16 juillet 2010 1
31 août 2009 à 12:12
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
0
marinmarais Messages postés 104 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 16 juillet 2010 1
31 août 2009 à 14:14
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
0
Rejoignez-nous