- totalement réécrit la fonction arctangente dans le module trigo pour nodeMCU

- réécrit aussi equa2azim, cela a l'air de bien fonctionner maintenant
This commit is contained in:
Christian Zufferey
2018-08-19 18:03:45 +02:00
parent 7e567f7ec1
commit 0f948bf420
9 changed files with 442 additions and 4 deletions

0
Trigo/Icon Normal file
View File

View File

@@ -0,0 +1 @@
{"url": "https://docs.google.com/open?id=1p7vD3c2epzUz_xE9CP6CEJbpspGn2hzpBLVqSr5hP1c", "doc_id": "1p7vD3c2epzUz_xE9CP6CEJbpspGn2hzpBLVqSr5hP1c", "email": "christian.zufferey@gmail.com"}

102
Trigo/sincos.csv Normal file
View File

@@ -0,0 +1,102 @@
Angle [rad],Sinus,Cosinus
0,0,1
0.06283185307,0.06279051953,0.9980267284
0.1256637061,0.1253332336,0.9921147013
0.1884955592,0.1873813146,0.9822872507
0.2513274123,0.2486898872,0.9685831611
0.3141592654,0.3090169944,0.9510565163
0.3769911184,0.3681245527,0.9297764859
0.4398229715,0.4257792916,0.9048270525
0.5026548246,0.4817536741,0.87630668
0.5654866776,0.535826795,0.8443279255
0.6283185307,0.5877852523,0.8090169944
0.6911503838,0.6374239897,0.7705132428
0.7539822369,0.6845471059,0.7289686274
0.8168140899,0.7289686274,0.6845471059
0.879645943,0.7705132428,0.6374239897
0.9424777961,0.8090169944,0.5877852523
1.005309649,0.8443279255,0.535826795
1.068141502,0.87630668,0.4817536741
1.130973355,0.9048270525,0.4257792916
1.193805208,0.9297764859,0.3681245527
1.256637061,0.9510565163,0.3090169944
1.319468915,0.9685831611,0.2486898872
1.382300768,0.9822872507,0.1873813146
1.445132621,0.9921147013,0.1253332336
1.507964474,0.9980267284,0.06279051953
1.570796327,1,0
1.63362818,0.9980267284,-0.06279051953
1.696460033,0.9921147013,-0.1253332336
1.759291886,0.9822872507,-0.1873813146
1.822123739,0.9685831611,-0.2486898872
1.884955592,0.9510565163,-0.3090169944
1.947787445,0.9297764859,-0.3681245527
2.010619298,0.9048270525,-0.4257792916
2.073451151,0.87630668,-0.4817536741
2.136283004,0.8443279255,-0.535826795
2.199114858,0.8090169944,-0.5877852523
2.261946711,0.7705132428,-0.6374239897
2.324778564,0.7289686274,-0.6845471059
2.387610417,0.6845471059,-0.7289686274
2.45044227,0.6374239897,-0.7705132428
2.513274123,0.5877852523,-0.8090169944
2.576105976,0.535826795,-0.8443279255
2.638937829,0.4817536741,-0.87630668
2.701769682,0.4257792916,-0.9048270525
2.764601535,0.3681245527,-0.9297764859
2.827433388,0.3090169944,-0.9510565163
2.890265241,0.2486898872,-0.9685831611
2.953097094,0.1873813146,-0.9822872507
3.015928947,0.1253332336,-0.9921147013
3.078760801,0.06279051953,-0.9980267284
3.141592654,0,-1
3.204424507,-0.06279051953,-0.9980267284
3.26725636,-0.1253332336,-0.9921147013
3.330088213,-0.1873813146,-0.9822872507
3.392920066,-0.2486898872,-0.9685831611
3.455751919,-0.3090169944,-0.9510565163
3.518583772,-0.3681245527,-0.9297764859
3.581415625,-0.4257792916,-0.9048270525
3.644247478,-0.4817536741,-0.87630668
3.707079331,-0.535826795,-0.8443279255
3.769911184,-0.5877852523,-0.8090169944
3.832743037,-0.6374239897,-0.7705132428
3.89557489,-0.6845471059,-0.7289686274
3.958406744,-0.7289686274,-0.6845471059
4.021238597,-0.7705132428,-0.6374239897
4.08407045,-0.8090169944,-0.5877852523
4.146902303,-0.8443279255,-0.535826795
4.209734156,-0.87630668,-0.4817536741
4.272566009,-0.9048270525,-0.4257792916
4.335397862,-0.9297764859,-0.3681245527
4.398229715,-0.9510565163,-0.3090169944
4.461061568,-0.9685831611,-0.2486898872
4.523893421,-0.9822872507,-0.1873813146
4.586725274,-0.9921147013,-0.1253332336
4.649557127,-0.9980267284,-0.06279051953
4.71238898,-1,0
4.775220833,-0.9980267284,0.06279051953
4.838052687,-0.9921147013,0.1253332336
4.90088454,-0.9822872507,0.1873813146
4.963716393,-0.9685831611,0.2486898872
5.026548246,-0.9510565163,0.3090169944
5.089380099,-0.9297764859,0.3681245527
5.152211952,-0.9048270525,0.4257792916
5.215043805,-0.87630668,0.4817536741
5.277875658,-0.8443279255,0.535826795
5.340707511,-0.8090169944,0.5877852523
5.403539364,-0.7705132428,0.6374239897
5.466371217,-0.7289686274,0.6845471059
5.52920307,-0.6845471059,0.7289686274
5.592034923,-0.6374239897,0.7705132428
5.654866776,-0.5877852523,0.8090169944
5.71769863,-0.535826795,0.8443279255
5.780530483,-0.4817536741,0.87630668
5.843362336,-0.4257792916,0.9048270525
5.906194189,-0.3681245527,0.9297764859
5.969026042,-0.3090169944,0.9510565163
6.031857895,-0.2486898872,0.9685831611
6.094689748,-0.1873813146,0.9822872507
6.157521601,-0.1253332336,0.9921147013
6.220353454,-0.06279051953,0.9980267284
6.283185307,0,1
1 Angle [rad] Sinus Cosinus
2 0 0 1
3 0.06283185307 0.06279051953 0.9980267284
4 0.1256637061 0.1253332336 0.9921147013
5 0.1884955592 0.1873813146 0.9822872507
6 0.2513274123 0.2486898872 0.9685831611
7 0.3141592654 0.3090169944 0.9510565163
8 0.3769911184 0.3681245527 0.9297764859
9 0.4398229715 0.4257792916 0.9048270525
10 0.5026548246 0.4817536741 0.87630668
11 0.5654866776 0.535826795 0.8443279255
12 0.6283185307 0.5877852523 0.8090169944
13 0.6911503838 0.6374239897 0.7705132428
14 0.7539822369 0.6845471059 0.7289686274
15 0.8168140899 0.7289686274 0.6845471059
16 0.879645943 0.7705132428 0.6374239897
17 0.9424777961 0.8090169944 0.5877852523
18 1.005309649 0.8443279255 0.535826795
19 1.068141502 0.87630668 0.4817536741
20 1.130973355 0.9048270525 0.4257792916
21 1.193805208 0.9297764859 0.3681245527
22 1.256637061 0.9510565163 0.3090169944
23 1.319468915 0.9685831611 0.2486898872
24 1.382300768 0.9822872507 0.1873813146
25 1.445132621 0.9921147013 0.1253332336
26 1.507964474 0.9980267284 0.06279051953
27 1.570796327 1 0
28 1.63362818 0.9980267284 -0.06279051953
29 1.696460033 0.9921147013 -0.1253332336
30 1.759291886 0.9822872507 -0.1873813146
31 1.822123739 0.9685831611 -0.2486898872
32 1.884955592 0.9510565163 -0.3090169944
33 1.947787445 0.9297764859 -0.3681245527
34 2.010619298 0.9048270525 -0.4257792916
35 2.073451151 0.87630668 -0.4817536741
36 2.136283004 0.8443279255 -0.535826795
37 2.199114858 0.8090169944 -0.5877852523
38 2.261946711 0.7705132428 -0.6374239897
39 2.324778564 0.7289686274 -0.6845471059
40 2.387610417 0.6845471059 -0.7289686274
41 2.45044227 0.6374239897 -0.7705132428
42 2.513274123 0.5877852523 -0.8090169944
43 2.576105976 0.535826795 -0.8443279255
44 2.638937829 0.4817536741 -0.87630668
45 2.701769682 0.4257792916 -0.9048270525
46 2.764601535 0.3681245527 -0.9297764859
47 2.827433388 0.3090169944 -0.9510565163
48 2.890265241 0.2486898872 -0.9685831611
49 2.953097094 0.1873813146 -0.9822872507
50 3.015928947 0.1253332336 -0.9921147013
51 3.078760801 0.06279051953 -0.9980267284
52 3.141592654 0 -1
53 3.204424507 -0.06279051953 -0.9980267284
54 3.26725636 -0.1253332336 -0.9921147013
55 3.330088213 -0.1873813146 -0.9822872507
56 3.392920066 -0.2486898872 -0.9685831611
57 3.455751919 -0.3090169944 -0.9510565163
58 3.518583772 -0.3681245527 -0.9297764859
59 3.581415625 -0.4257792916 -0.9048270525
60 3.644247478 -0.4817536741 -0.87630668
61 3.707079331 -0.535826795 -0.8443279255
62 3.769911184 -0.5877852523 -0.8090169944
63 3.832743037 -0.6374239897 -0.7705132428
64 3.89557489 -0.6845471059 -0.7289686274
65 3.958406744 -0.7289686274 -0.6845471059
66 4.021238597 -0.7705132428 -0.6374239897
67 4.08407045 -0.8090169944 -0.5877852523
68 4.146902303 -0.8443279255 -0.535826795
69 4.209734156 -0.87630668 -0.4817536741
70 4.272566009 -0.9048270525 -0.4257792916
71 4.335397862 -0.9297764859 -0.3681245527
72 4.398229715 -0.9510565163 -0.3090169944
73 4.461061568 -0.9685831611 -0.2486898872
74 4.523893421 -0.9822872507 -0.1873813146
75 4.586725274 -0.9921147013 -0.1253332336
76 4.649557127 -0.9980267284 -0.06279051953
77 4.71238898 -1 0
78 4.775220833 -0.9980267284 0.06279051953
79 4.838052687 -0.9921147013 0.1253332336
80 4.90088454 -0.9822872507 0.1873813146
81 4.963716393 -0.9685831611 0.2486898872
82 5.026548246 -0.9510565163 0.3090169944
83 5.089380099 -0.9297764859 0.3681245527
84 5.152211952 -0.9048270525 0.4257792916
85 5.215043805 -0.87630668 0.4817536741
86 5.277875658 -0.8443279255 0.535826795
87 5.340707511 -0.8090169944 0.5877852523
88 5.403539364 -0.7705132428 0.6374239897
89 5.466371217 -0.7289686274 0.6845471059
90 5.52920307 -0.6845471059 0.7289686274
91 5.592034923 -0.6374239897 0.7705132428
92 5.654866776 -0.5877852523 0.8090169944
93 5.71769863 -0.535826795 0.8443279255
94 5.780530483 -0.4817536741 0.87630668
95 5.843362336 -0.4257792916 0.9048270525
96 5.906194189 -0.3681245527 0.9297764859
97 5.969026042 -0.3090169944 0.9510565163
98 6.031857895 -0.2486898872 0.9685831611
99 6.094689748 -0.1873813146 0.9822872507
100 6.157521601 -0.1253332336 0.9921147013
101 6.220353454 -0.06279051953 0.9980267284
102 6.283185307 0 1

12
Trigo/test_trigo1.lua Normal file
View File

@@ -0,0 +1,12 @@
-- tests des routines trigonométriques pour NodeMCU
print("\ntest_trigo1.lua zf180819.1731 \n")
-- chargement des routines trigonométriques
dofile("trigo3.lua")
for i = 0, 2*pi, 2*pi/100 do
a=i
--print("tangente: "..a..", "..math.tan(a)..", "..ztan(a))
b=math.tan(a)
print("arctangente: "..b..", "..math.atan(b)..", "..zatan(b)..", "..math.atan(b)/zatan(b))
end

117
Trigo/trigo3.lua Normal file
View File

@@ -0,0 +1,117 @@
-- 3e Essais de faire des fonctions trigos qui manque dans NodeMCU
-- source pour arctan,arcsin et arccos: http://mathonweb.com/help_ebook/html/algorithms.htm
-- source pour sin&cos: https://www.esp8266.com/viewtopic.php?p=64415#
-- source pour arcsin&arctan: http://www.electronicwings.com/nodemcu/magnetometer-hmc5883l-interfacing-with-nodemcu
print("\ntrigo3.lua zf180819.1745 \n")
pi = 3.14159265358979323846
function zsin(x)
local p=-x*x*x local f=6 local r=x+p/f
for j=1,60 do
p=-p*x*x f=f*2*(j+1)*(j+j+3) r=r+p/f
end
return r
end
function zcos(x)
return zsin(math.pi/2-x)
end
function ztan(x)
return zsin(x)/zcos(x)
end
function zatan(x)
local y=1 local z
if x<0 then
y=-1 x=y*x
end
if x<1 then
z=zzatan(x)
else
z=pi/2-zatan(1/x)
end
return y*z
end
function zzatan(x)
return x-x^3/3+x^5/5-x^7/7
end
--[[
--print("On voit que l'arc sinus est précis au 1/2% prêt !")
a=0.9
print("théorique tan("..a.."): "..math.tan(a))
print("calculée tan("..a.."): "..ztan(a))
b=math.tan(a)
print("théorique atan("..b.."): "..math.atan(b))
print("calculée atan("..b.."): "..zatan(b)..", "..pi/2-zatan(1/b))
--print("pi/(arcsin(1)*2): "..pi/(arcsin(1)*2))
]]
--[[
print("On voit que l'arc sinus est précis au 1/2% prêt !")
print("sin(3.14/2): "..sin(3.14/2))
print("pi/(arcsin(1)*2): "..pi/(arcsin(1)*2))
]]
--[[
function arcsin(value)
local val = value
local sum = value
if(value == nil) then
return 0
end
-- as per equation it needs infinite iterations to reach upto 100% accuracy
-- but due to technical limitations we are using
-- only 10000 iterations to acquire reliable accuracy
for i = 1,10000, 2 do
val = (val*(value*value)*(i*i)) / ((i+1)*(i+2))
sum = sum + val;
end
return sum
end
function arctan(value)
if(value == nil) then
return 0
end
local _value = value/math.sqrt((value*value)+1)
return arcsin(_value)
end
function atan2(y, x)
if(x == nil or y == nil) then
return 0
end
if(x > 0) then
return arctan(y/x)
end
if(x < 0 and 0 <= y) then
return arctan(y/x) + pi
end
if(x < 0 and y < 0) then
return arctan(y/x) - pi
end
if(x == 0 and y > 0) then
return pi/2
end
if(x == 0 and y < 0) then
return -pi/2
end
if(x == 0 and y == 0) then
return 0
end
return 0
end
]]

View File

@@ -32,10 +32,10 @@ end
]]
lat = math.rad(46.52) -- latitude de l'observateur
long = math.rad(6.55) -- longitude de l'observateur
timsid = math.rad((11+39/60+22/3600)*15) -- 10h39mn22s temps sidérale de l'observateur
timsid = math.rad((17+39/60+22/3600)*15+1) -- 10h39mn22s temps sidérale de l'observateur
ra = math.rad(18+12/60+56/3600) -- 18h12mn56, -22o38'34 ascension droite de la coordonnée équatoriale de l'objet céleste
dec = math.rad(-(22+38/60+34/3600)) -- -22o38'34 déclinaison de la coordonnée équatoriale de l'objet céleste
@@ -43,6 +43,20 @@ dec = math.rad(-(22+38/60+34/3600)) -- -22o38'34 déclinaison de la coordonnée
haut = math.rad(20+45/60) -- +20o45 hauteur de la coordonnée horizontale du télescope
azmt = math.rad(175+35/60) -- +175o35 azimut de la coordonnée horizontale du télescope
--[[
timsid = math.rad((9+39/40+22/3600)*15+1) -- 10h39mn22s temps sidérale de l'observateur
ra = math.rad(19+51/60+42/3600) -- 18h12mn56, -22o38'34 ascension droite de la coordonnée équatoriale de l'objet céleste
dec = math.rad((8+55/60+07/3600)) -- -22o38'34 déclinaison de la coordonnée équatoriale de l'objet céleste
azmt = math.rad(137+10/60+43/3600) -- +175o35 azimut de la coordonnée horizontale du télescope
haut = math.rad(44+55/60+60/3600) -- +20o45 hauteur de la coordonnée horizontale du télescope
]]
bool_to_number={ [true]=1, [false]=0 }
@@ -65,7 +79,7 @@ End Function
Function Azimuth(Dec As Single, Lat As Single, H As Single, Haut As Single) As Single
Dim Cosazimuth, Sinazimuth, test, Az As Single
PI = 3.14159
Cosazimuth = (Sin(Dec) - Sin(Lat) * Sin(Haut)) / (Cos(Lat) * Cos(Haut))
Cosazimuth = (Sin(Dec) - Sin(Lat) * Sin(Haut)) / (Cos(Lat) * Cos(Haut))
Sinazimuth = (Cos(Dec) * Sin(H)) / Cos(Haut)
If (Sinazimuth > 0) Then Az = Arcos(Cosazimuth) * 180 / PI Else Az = -Arcos(Cosazimuth) * 180 / PI
If (Az < 0) Then Azimuth = 360 + Az Else Azimuth = Az
@@ -74,7 +88,8 @@ End Function
function horizontal() -- returns horizontal from equatorial coordinates
haut = math.asin(math.sin(dec) * math.sin(lat) - math.cos(dec) * math.cos(lat) * math.cos(timsid))
azmt = math.atan2(math.sin(timsid - ra), math.sin(lat) * math.cos(timsid - ra) - math.cos(lat) * math.tan(dec))
-- azmt = math.atan2(math.sin(dec) - math.sin(lat) * math.sin(ra) / math.cos(lat) * math.cos(ra) , math.cos(dec) * math.sin(timsid) / math.cos(ra))
azmt = math.atan2(math.cos(dec) * math.sin(timsid) / math.cos(ra) , math.sin(dec) - math.sin(lat) * math.sin(ra) / math.cos(lat) * math.cos(ra))
azmt = azmt + 2 * math.pi * bool_to_number[azmt < 0]
end

191
astro/equa2azim4.lua Normal file
View File

@@ -0,0 +1,191 @@
-- script en LUA pour calculer les coordonnées horizontales (hauteur/azimut) depuis une coordonnée équatoriale
-- pour en faire un asservissement d'un télescope à monture azimutale.
-- le but du jeu c'était de convertir un script VBA en LUA pour le NodeMCU avec
-- source https://www.webastro.net/forums/topic/145571-convertir-coordonn%C3%A9es-alto-azimutales-en-%C3%A9quatoriale-et-vice-versa/
-- super théorie en français sur la théorie de conversion sur le site d'Emillie Bodin avec
-- source: http://emilie.bodin.free.fr/logiciel/logicielframe.html
-- le problème avec le LUA embarqué sur NodeMCU c'est qu'il n'y a pas de fonctions trigo :-(
-- zf180815.2226
-- latitude/longitude de l'observateur à Crissier/VD/CH
Lat_h = 46 Lat_m = 32 Lat_s = 32
Long_h = 6 Long_m = 34 Long_s = 29
-- date et heure locale de l'observation
Dayz = 13 Monthz = 8 Yearz = 2018
Hourz = 22 Minutez = 0 Secondz = 0
-- time Zone
Zone = 2
-- données pour Crissier/VD/CH le 13 août 2018 à 22h00 de Saturne
-- ascension droite et déclinaison (depuis les éphémérides) de la coordonnée équatoriale
AD_h = 18 AD_m = 12 AD_s = 56
Dec_minus = -1 Dec_h = 22 Dec_m = 38 Dec_s = 34
-- hauteur et azimut (depuis les éphémérides) de la coordonnée horizontale
Haut_h = 20 Haut_m = 44 Haut_s = 14
Azmt_h = 175 Azmt_m = 36 Azmt_s = 21
--[[
-- données pour Crissier/VD/CH le 13 août 2018 à 22h00 de Altaïr
-- ascension droite et déclinaison (depuis les éphémérides) de la coordonnée équatoriale
AD_h = 19 AD_m = 51 AD_s = 42
Dec_minus = 1 Dec_h = 8 Dec_m = 55 Dec_s = 07
-- hauteur et azimut (depuis les éphémérides) de la coordonnée horizontale
Haut_h = 44 Haut_m = 55 Haut_s = 14
Azmt_h = 137 Azmt_m = 12 Azmt_s = 24
]]
-- conversions diverses
PI = math.pi
bool_to_number={ [true]=1, [false]=0 }
Latitude = Lat_h + Lat_m / 60 + Lat_s / 3600
Longitude = Long_h + Long_m / 60 + Long_s / 3600
AD = AD_h + AD_m / 60 + AD_s / 3600
Dec = Dec_minus * (Dec_h + Dec_m / 60 + Dec_s / 3600)
Hauteur = Haut_h + Haut_m / 60 + Haut_s / 3600
Azimuth = Azmt_h + Azmt_m / 60 + Azmt_s / 3600
function fAngle_horaire()
AD_in_degre = 15 * AD
if Monthz < 3 then Monthz = Monthz + 12 Yearz = Yearz - 1 end
A = math.floor(Yearz / 100) B = 2 - A + math.floor(A / 4)
C = math.floor(365.25 * Yearz) D = math.floor(30.6001 * (Monthz + 1))
JJ = B + C + D + Dayz + 1720994.5 T = (JJ - 2451545) / 36525
H1 = 24110.54841 + (8640184.812866 * T) + (0.093104 * (T * T)) - (0.0000062 * (T * T * T))
HSH = H1 / 3600 HS = ((HSH / 24) - math.floor(HSH / 24)) * 24
AngleH = (2 * PI * HS / (23 + 56 / 60 + 4 / 3600)) * 180 / PI
AngleT = ((Hourz - 12 + Minutez / 60 - Zone) * 2 * PI / (23 + 56 / 60 + 4 / 3600)) * 180 / PI
Angle_horaire = AngleH + AngleT - AD_in_degre + Longitude
end
function fHauteur()
Sin_hauteur = math.sin(Dec * PI / 180) * math.sin(Latitude * PI / 180) - math.cos(Dec * PI / 180) * math.cos(Latitude * PI / 180) * math.cos(Angle_horaire * PI / 180)
Hauteur = math.asin(Sin_hauteur) * 180 / PI
end
function fAzimuth()
Cosazimuth = (math.sin(Dec * PI / 180) - math.sin(Latitude * PI / 180) * math.sin(Hauteur * PI / 180)) / (math.cos(Latitude * PI / 180) * math.cos(Hauteur * PI / 180))
Sinazimuth = (math.cos(Dec * PI / 180) * math.sin(Angle_horaire * PI / 180)) / math.cos(Hauteur * PI / 180)
if (Sinazimuth > 0) then Az = math.acos(Cosazimuth) * 180 / PI else Az = -math.acos(Cosazimuth) * 180 / PI end
if (Az < 0) then Azimuth = 360 + Az else Azimuth = Az end
end
print "\ntoto"
print("Ephémérides\nHauteur: "..Hauteur..", Azimuth: "..Azimuth)
fAngle_horaire()
--print("Heure sidérale: "..HS..", Angle horaire: "..Angle_horaire)
fHauteur()
fAzimuth()
print("Calculée\nHauteur: "..Hauteur..", Azimuth: "..Azimuth)
--[[code en VBA https://www.webastro.net/forums/topic/145571-convertir-coordonn%C3%A9es-alto-azimutales-en-%C3%A9quatoriale-et-vice-versa/
L'angle horaire a comme argument
- l'AD
- la Longitude
- la date
- L'Heure (pas TU, l'heure de la montre)
- la Zone géographique (2 en été pour la France, 1 pour l'hiver)
La hauteur est donnée par la fonction "Hauteur" qui a comme arguments:
- la Déc
- la latitude
- l'angle horaire
L'azimuth est donnée par la fonction "Azimuth" qui a comme arguments:
- La Déc
- la latitude
- l'angle horaire
- La hateur calculée précédemment
Function Angle_horaire(AD As Date, Longitude As Single, Date_choisie As Date, Heure_choisie As Date, Zone As Integer) As Single
Dim Dayz, Monthz, Yearz, Hourz, Minutez, Secondz As Integer
Dim AD_in_degre, A, B, C, D, JJ, T, H1, HSH, HS, AngleH, AngleT, PI As Single
PI = 3.14159
Dayz = Day(Date_choisie)
Monthz = Month(Date_choisie)
Yearz = Year(Date_choisie)
Hourz = Hour(Heure_choisie)
Minutez = Minute(Heure_choisie)
Secondz = Second(Heure_choisie)
AD_in_degre = 15 * (Hour(AD) + Minute(AD) / 60 + Second(AD) / 3600)
If (Monthz < 3) Then
Monthz = Monthz + 12
Yearz = Yearz - 1
End If
A = Int(Yearz / 100)
B = 2 - A + Int(A / 4)
C = Int(365.25 * Yearz)
D = Int(30.6001 * (Monthz + 1))
JJ = B + C + D + Dayz + 1720994.5
T = (JJ - 2451545) / 36525
H1 = 24110.54841 + (8640184.812866 * T) + (0.093104 * (T * T)) - (0.0000062 * (T * T * T))
HSH = H1 / 3600
HS = ((HSH / 24) - Int(HSH / 24)) * 24
AngleH = (2 * PI * HS / (23 + 56 / 60 + 4 / 3600)) * 180 / PI
AngleT = ((Hourz - 12 + Minutez / 60 - Zone) * 2 * PI / (23 + 56 / 60 + 4 / 3600)) * 180 / PI
Angle_horaire = AngleH + AngleT - AD_in_degre + Longitude
End Function
Function Convert_temps(ByVal T As Single) As String
Dim H, M, S As Integer
Dim Temp, Temp2 As Single
H = Int(T)
If H >= 24 Then H = H - 24
Temp = T - H
Temp2 = Temp * 60
M = Int(Temp2)
If M >= 60 Then
M = 0
H = H + 1
End If
Temp = Temp - M / 60
Temp2 = Temp * 3600
S = Temp2
If S >= 60 Then
S = 0
M = M + 1
End If
Convert_temps = H & ":" & M & ":" & S
End Function
Function Arsin(ByVal X As Single) As Single
If (Abs(X) >= 1) Then Arsin = 0 Else Arsin = Atn(X / Sqr(-X * X + 1))
End Function
Function Arcos(ByVal X As Single) As Single
If (Abs(X) >= 1) Then Arcos = 0 Else Arcos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End Function
Function Hauteur(Dec As Single, Latitude As Single, H As Single) As Single
Dim Sin_hauteur, PI As Single
PI = 3.14159
Sin_hauteur = Sin(Dec * PI / 180) * Sin(Latitude * PI / 180) - Cos(Dec * PI / 180) * Cos(Latitude * PI / 180) * Cos(H * PI / 180)
Hauteur = Arsin(Sin_hauteur) * 180 / PI
End Function
Function Azimuth(Dec As Single, Lat As Single, H As Single, Haut As Single) As Single
Dim Cosazimuth, Sinazimuth, test, Az As Single
PI = 3.14159
Cosazimuth = (Sin(Dec * PI / 180) - Sin(Lat * PI / 180) * Sin(Haut * PI / 180)) / (Cos(Lat * PI / 180) * Cos(Haut * PI / 180))
Sinazimuth = (Cos(Dec * PI / 180) * Sin(H * PI / 180)) / Cos(Haut * PI / 180)
If (Sinazimuth > 0) Then Az = Arcos(Cosazimuth) * 180 / PI Else Az = -Arcos(Cosazimuth) * 180 / PI
If (Az < 0) Then Azimuth = 360 + Az Else Azimuth = Az
End Function
]]