Aller au contenu


Calcul De Arctangente


  • Veuillez vous connecter pour répondre
1 réponse à ce sujet

#1 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 22 août 2009 - 13:55

Voici un script d'approximation de la fonction Arctangente.
A quoi ça sert?

Si dans vos calculs de trigo, vous calculez la tangente d'un angle, et que vous cherchez la valeur de cet angle, c'est la fonction Arctangente qu'il faut utiliser. Arctangente est la fonction inverse de la fonction tangente.

La variable globale d'entrée est ARCTAN_IN, cette de sortie ARCTAN_OUT.

Ce script s'exécute en une seule frame, pas de boucle while, donc assez rapide.

ATTENTION, l'angle à la sortie est exprimé en RADIAN!

begin VZ_ARCTAN_script

;======================
;ARCTAN, par Von Zeeple (Wiwiland)
;======================

float PI2;Pi / 2
float PI4;Pi / 4

float p0
float p1
float p2
float p3
float p4

float q0
float q1
float q2
float q3
float q4


float P
float Q

float x
float x2
float in
float out

set PI2 to 1.5707
set PI4 to 0.7853


set p0 to 896.7859
set p1 to 1780.4063
set p2 to 1153.029
set p3 to 268.4254
set p4 to 16.1536

set q0 to 896.7859
set q1 to 2079.3349
set q2 to 1666.7838
set q3 to 536.265
set q4 to 58.9569

set in to ARCTAN_IN

;ATTENTION, ARCTAN_OUT en Radian



;===============================================
;Découpage de la fonction pour une meilleur approximation
;============================================

if ( in > 0 )
	if ( in > 2 )
	set x to ( 1 / in )
	else
	set x to in
	endif
else
	if ( in < -2 )
	set x to ( 1 / in )
	else
	set x to in
	endif
endif




;====================================
;Calcul de Arctan ( approximant de Padé )
;=====================================


set x2 to ( x * x )

;P = ( ( ( (p4*x2 + p3)*x2 + p2) *x2 + p1) *x2 + p0)

set P to ( ( p4 * x2 + p3) * x2 )
set P to ( ( P + p2 ) * x2 )
set P to ( ( P + p1 ) * x2 )
set P to ( P + p0 ) 

;Q = ( ( ( ( (x2 + q4)*x2 + q3) *x2 + q2)*x2 + q1) *x2 + q0)

set Q to ( ( x2 + q4 ) * x2 )
set Q to ( ( Q + q3 ) * x2 )
set Q to ( ( Q + q2 ) * x2 )
set Q to ( ( Q + q1 ) * x2 )
set Q to ( Q + q0 )

set out to ( ( P / Q ) * x )

;=================
; Rassemblage
;=====================

if ( in > 0 )
	if ( in > 2 )
	set out to ( PI2 - out )
	else
	set out to out
	endif
else
	if ( in < -2 )
	set out to ( -PI2 - out )
	else
	set out to out
	endif
endif


set ARCTAN_OUT to out


;stopscript "VZ_ARCTAN_script"

end

Le Steampunk, c'est bon, mangez en  !

#2 elendell

elendell

    Mécano Dell'Arte


Posté 22 août 2009 - 15:00

Voila un script qui peut rendre bien des services et quelque chose me dit qu'il me sera d'ailleurs utile assez rapidement.  :)

Merci, Von Zeeple !




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)