Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'ai besoin de calculer des angles d'un triangle quelconque en utilisant la formule :

angle = acos[(a*a + b*b - c*c) / 2ab],

mais le lisp n'a pas la fonction acos. Avez vous une autre solution ?

 

Merci

Posté(e)

Evgeniy à raison utilise ATAN, sachant que:

 

(defun tang (x / ) (/ (sin x) (cos x))) pour obtenir la tangente d'un angle à partir du sinus et cosinus.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

coucou,

 

juste pour le fun, car j'ai lu en diagonale (hihihi)

 

merci à ElpanovEvgeniy, de nous parler des Cathètes,

il y a bien longtemps que je ne l'avais entendu,

c'est comme le mot Corauste

mais là, ma mémoire embrumée par toute cette informatique

en a perdu la trace...

 

ne prenez pas la Tangente en cas de Sinusite.

 

 

amicalement

 

Posté(e)
Le problème c'est que je ne connais pas le sinus x, ni l'angle x, donc comment utiliser atan ?

 

connaissant le cosinus, il est possible de calculer le sinus

en effet sinus ²+ cosinus²= 1

 

en fait la fonction acos (x)

s'écrit ainsi

 
(defun acos (x)
 (if (= x 0)
   (/ pi 2)
   (atan (/ (sqrt (- 1 (* x x))) x))
 )
)  

 

de la même manière la fonction asin (x) s'écrit

 
(defun asin (x)
 (cond
   ((= x 1) (/ pi 2))
   ((= x -1) (/ pi -2))
   (t (atan (/ x (sqrt (- 1 (* x x))))))
 )
)

 

les résultats son en radians bien entendu ; reste juste une petite incertitude sur (acos 0) qui retourne (/ pi 2) mais le résultat peut être aussi bien (/ pi -2)

Posté(e)

Salut Didier-AD,

 

Si je peux me permettre, la fonction atan accepte les arguments sous deux formes :

 

(atan nombre) ou (atan nombre1 nombre2)

 

Dans le deuxième cas, il est retourné l'arc tangent de nombre1/nombre2 et si nombre2 est égal à 0 il est retourné + ou - 1.5708 suivant le signe de nombre1.

En employant cette syntaxe, il n'est donc pas nécessaire de faire de test sur la valeur de x.

 

Dans leur expression la plus simple, les fonctions pourraient être définies comme suit :

 

(defun acos (num)
(atan (sqrt (- 1 (expt num 2))) num)
) 

 

et

 

(defun asin (num)
(atan num (sqrt (- 1 (expt num 2))))
) 

 

On peut ajouter un test sur num, pour prévenir une entrée utilisateur erronée (nombre supérieur à 1 ou inférieur à -1)

 

(defun acos (num)
(if ((atan (sqrt (- 1 (expt num 2))) num)
)
) 

 

et

 

(defun asin (num)
(if ((atan num (sqrt (- 1 (expt num 2))))
)
) 

 

Or à l'usage, j'ai pu remarqué qu'il peut être nécessaire d'accepter une tolérance au cas où le nombre serait très légèrement supérieur à 1 ou inférieur à -1 (en deçà du milliardième).

Dans leur version actuelle (j'ai mis à jour le lien que je donnais plus haut) mes fonctions acos et asin sont donc :

 

(defun ACOS (num)
 (cond
   ((equal num 1 1e-9) 0.0)
   ((equal num -1 1e-9) pi)
   ((     (atan (sqrt (- 1 (expt num 2))) num)
   )
 )
)

(defun ASIN (num)
 (cond
   ((equal num 1 1e-9) (/ pi 2))
   ((equal num -1 1e-9) (/ pi -2))
   ((     (atan num (sqrt (- 1 (expt num 2))))
   )
 )
)

 

Pour interpmanu,

 

Si tu lis ces réponses, dans le lien que je donne, tu devrais trouver la réponse à ton problème avec la routine angle_3pts qui utilise le "Théorème de Carnot".

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
Salut Didier-AD,

 

Si je peux me permettre, la fonction atan accepte les arguments sous deux formes :

 

(atan nombre) ou (atan nombre1 nombre2)

 

Et bien, comme quoi on en apprend tous les jours...

Sur les fonctions VL* je ne m'étonne pas d'en apprendre encore mais sur les fonctions qui datent du millénaire dernier ben çà alors

 

vu qu'un jour où on a rien appris est un jour fichu, Merci Gile !

  • 1 mois après...
Posté(e)

Bonjour,

 

Merci pour tous ceux qui m'ont répondu.

 

J'ai solutionné mon problème en utilisant la fonction atan.

 

x, y, et z étant les 3 cotés du triangle quelconque.

 

La formule donne :

(setq anglexy (atan (* x 2.0 (/ (sqrt (- (carre y) (carre (/ (- (+ (carre x) (carre y)) (carre z)) (* x 2.0))))) (- (+ (carre x) (carre y)) (carre z))))))

 

 

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité