-- 3e Essais de faire des fonctions trigos qui manquent 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 zf180820.2205 \n") -- encore des problèmes, 8% d'erreur, avec les atan vers pi/4, zf180821.1849 function zsin(x) local y=1 if x>math.pi*2 then x=x%(math.pi*2) end if x>math.pi then y=-1 x=x-math.pi end if x>math.pi/2 then x=math.pi-x end local p=x local f=1 local r=p for j=2,10,2 do p=-p * x * x f=f*j*(j+1) r=r+p/f end return(y*r) end function zcos(x) if x>math.pi*2 then x=x%(math.pi*2) end if x>math.pi then x=math.pi-x end return zsin(math.pi/2-x) end function ztan(x) return zsin(x)/zcos(x) end function zasin(x) return zatan(x/math.sqrt(1-x*x)) end function zacos(x) -- return zatan(math.sqrt(1-x*x)/x) --return math.pi/2-zatan(x/math.sqrt(1-x*x)) return math.pi/2-zasin(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=math.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 --[[ 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 ]]