|
Membre |
|
Inscription : Mar Août 22, 2006 8:38 am Message(s) : 3145 Localisation : 34410 Sérignan - Languedoc
|
Pidou a écrit: Tu as l'air d'avoir déjà bien planché sur le problème. Alors peut être as tu des formules de calcul à proposer à Antoine ?
Bonjour, pour ceux que ça pourrait intéresser et pour vos commentaires, voici les formules que j'ai utilisées pour calculer les différentes valeurs déduites. #Region "fonctions"
'***Log décimal Public Shared Function Log10(ByRef number As Double) As Double Log10 = System.Math.Log(number) / 2.30258509299405 End Function
'***Farenheit en °C Public Shared Function F2C(ByVal F As Single) As Single F2C = CSng(System.Math.Round(((F / 10) - 32) / CSng(1., 1)) End Function
'*** inch mercure en hPa Public Shared Function Hg2hPa(ByVal Hg As Single) As Single Hg2hPa = Hg / CSng(System.Math.Round(0.02953 * 1000, 1)) End Function
'*** inch en cm Public Shared Function In2cm(ByVal Inch As Single) As Double In2cm = CSng(System.Math.Round(Inch / CSng(2.54), 2)) End Function
'****Pression de vapeur utilise la température Private Shared Function VaporPress(ByVal PRose As Double) As Double VaporPress = CSng(System.Math.Round(6.1078 * (10 ^ ((7.5 * PRose) / (237.3 + PRose))), 1)) End Function
'Pression de vapeur saturée utilise le point de rosée Private Shared Function VaporPressSatur(ByVal TempO As Single) As Double VaporPressSatur = CSng(6.1078 * (10 ^ ((7.5 * TempO) / (TempO + 237.7)))) End Function
'**** densité de l'air Private Shared Function AirDensity(ByVal PA As Single, ByVal T As Single, ByVal Press As Double) As Double Dim es As Double = 6.1078 * (10 ^ ((7.5 * T) / (T + 237.3))) AirDensity = CSng(System.Math.Round(((PA * 100) / (287.05 * (T + 273.15))) + ((es * 100) / (461.495 * (T + 273.15))), 4)) End Function
'*** tempe virtuelle Private Shared Function VirtualT(ByVal PA As Single, ByVal T As Single, ByVal Press As Double) As Double VirtualT = CSng(System.Math.Round(((T + CSng(273.15)) / (1 - (0.378 * (Press / PA)))) - 273.15, 1)) End Function
'***point de rosee Private Shared Function PtRosee(ByVal T As Single, ByVal H As Single) As Double Dim es As Double = 6.1078 * (10 ^ ((7.5 * T) / (T + 237.3))) PtRosee = System.Math.Round((237.7 * Log10(es * H / 611)) / (7.5 - Log10(es * H / 611)), 1) End Function
' ***base nuageuse Private Shared Function CloudBase(ByVal T As Single, ByVal Prose As Double) As Double CloudBase = System.Math.Round((T - Prose) * 1000 / 8.01) End Function
' *** refroidissement éolien Private Shared Function WindChill(ByVal V As Single, ByVal T As Single) As Double WindChill = T If V > 0 Then WindChill = System.Math.Round((13.12 + (0.6215 * T) - (11.37 * (V ^ 0.16)) + (0.3965 * T * (V ^ 0.16))), 1) End If End Function
'*** pression relative fonction altitude Private Shared Function Prel(ByVal P As Single, ByVal A As Single) As Double Prel = P + (A * 0.120482) End Function
'*** pression /altitude Private Shared Function PressAltitude(ByVal P As Single) As Double PressAltitude = ((1 - (P / 1013.25) ^ 0.190263)) * 44307.69 End Function
'*** humidex Private Shared Function Humidex(ByVal T As Single, ByVal Prose As Double) As Double Humidex = System.Math.Round(T + (0.5555 * (6.11 * System.Math.Exp(5417.753 * (0.0036608 - 1 / (273.16 + Val(Prose)))) - 10.0)), 1) End Function
'*** point de gelée Public Shared Function FrostPoint(ByRef T As Single, ByRef Prose As Single) As Single Dim ll As Double ll = 1 If T < 0 Then ll = -Log10(-T) End If Dim FP As Single = Prose + (2671.02 / ((2954.61 / (T + 0.001)) + (2.193665 * ll) - 13.3448)) - T If FP > 0 Then FP = 0 FrostPoint = System.Math.Round(FP, 4) End Function
'*********Calcul du passage à l'heure d'été --- mais il y a plus simple pour obtenir le décalage Private Shared TimeZone1 As Short Private Shared annees(2022, 1) As Long
Private Shared Function HeureEte(ByVal timestamp As ULong) As Integer HeureEte = 1 Dim date0 As DateTime = New DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime Dim date1 As DateTime date1 = date0.AddSeconds(timestamp) If ((timestamp >= annees(date1.Year, 0)) And (timestamp <= annees(date1.Year, 1))) Then HeureEte = 2 End If End Function Private Shared Function CalcHeureEte(ByVal annee As Integer) As Integer Dim HivDate, EteDate As String Dim date0 As DateTime = New DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime EteDate = "25/03/" & annee & " 02:00:00" Dim jour As Short = CShort(Weekday(CDate(EteDate), vbMonday)) annees(annee, 0) = DateDiff("s", date0, CDate((32 - jour).ToString & EteDate.Substring(2)).ToUniversalTime) HivDate = "25/10/" & annee & " 02:00:00" jour = CShort(Weekday(CDate(HivDate), vbMonday)) annees(annee, 1) = DateDiff("s", date0, CDate((32 - jour).ToString & HivDate.Substring(2)).ToUniversalTime) End Function '****** Public Shared Function TZ(ByVal LaDate As Date) As Short ' *********Calcul du décalage horaire par rapport à UTC Dim theZone As TimeZone = TimeZone.CurrentTimeZone TZ = CShort(theZone.GetUtcOffset(LaDate).ToString().Substring(0, 2)) '**************(tient compte de l'heure d'été) End Function
'************** phase lunaire . Calcul imprécis. Public Shared Function Moon(ByVal TS As ULong) As Single Dim TSDate As Date = TS2Datetime(TS) Dim phaseDay As Double phaseDay = MoonPhase(TSDate) Moon = phaseDay.ToString("F2") End Function Public Shared Function MoonPhase(ByVal dateUtc As Date) As Double Dim days As Double = dateUtc.Subtract(#1/1/1600#).TotalDays Dim cycles As Double = days * 0.03386319 - 12.5 Dim moonphase1 As Double = Math.IEEERemainder(cycles, 1.0) * 29.53059 If moonphase1 < 0 Then MoonPhase = 29.53059 + moonphase1 Else MoonPhase = moonphase1 End Function '******** conversion TS unix en date Private Shared Function TS2Datetime(ByVal TS As ULong) As DateTime Dim date1 As DateTime = New System.DateTime(1970, 1, 1, 0, 0, 0, 0) TS2Datetime = date1.AddSeconds(TS) End Function
#End Region
_________________ Jean Station : VP2 Pro Console Vue + anémomètre à Ultra-sons Logiciels : Cumulus 1.9.4 + Cumulus2SQL Serveur local : Apache + MySQL +PHP PC : W10 Support Audio : FR
http://meteoserignan.ddns.net
"Aide-toi d'abord toi-même et les autres t'aideront ... peut-être"
|
|