French Sub et retour de 2 valeurs

MDev

New Member
Licensed User
Longtime User
Bonjour à tous,

J'ai une Sub qui calcule une Latitude ET une Longitude en fonction d'un point géographique de référence, d'une distance et d'un "cap" via le code suivant

B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double)
        Dim SpLat,SpLng as Double
        SpLat= ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
        SpLng= Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
End Sub

Comment puis je faire pour obtenir le résultat via la syntaxe suivante :

sp(40,0,135,12).SpLat
ou
sp(40,0,135,12).SpLng

Merci d'avance pour vos réponses
 
Last edited:

klaus

Expert
Licensed User
Longtime User
sp(40,0,135,12).SpLat
ou
sp(40,0,135,12).SpLng
ceci est impossible.

Ceci oui:
B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double) As Double()
    Dim Sp(2) As Double
    Sp(0) = ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
    Sp(1) = Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
    Return Sp
End Sub
ou ceci:
B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double) As Location
    Dim Loc As Location
    Loc.Latitude = ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
    Loc.Longitude = Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
    Return Loc
End Sub
Location est un objet de la librairie GPS.

Une troisième solutuon serait de définir une Variable Type.
 

MDev

New Member
Licensed User
Longtime User
Merci Klaus, j'ai opté pour la définition d'une variable Type et le résultat est bien comme attendu

B4X:
Type CoordSp(SpLat As Double, SpLng As Double)

B4X:
Sub SP(Lat As Double,Lng As Double, Hdg As Double,D As Double) As CoordSp
        Dim Result As CoordSp
        Result.Initialize
        Result.SpLat= ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
        Result.SpLng= Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))))
        Return Result
End Sub

SP(40,0,135,12).SpLat ET/OU SP(40,0,135,12).SpLng fonctionne maintenant.
 
Top