interpmanu Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 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
Patrick_35 Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 SalutOui, la fonction cos @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ElpanovEvgeniy Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 Bonjour.Utilise la fonction ATAN Evgeniy
bonuscad Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 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
interpmanu Posté(e) le 18 décembre 2006 Auteur Posté(e) le 18 décembre 2006 Le problème c'est que je ne connais pas le sinus x, ni l'angle x, donc comment utiliser atan ?
ElpanovEvgeniy Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 Si A et B les cathètesC - l'hypoténuse( ATAN A B) PS: Si je n'ai pas compris la question, montre s'il vous plaît le tableau... Evgeniy
(gile) Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 Salut, Tu devrais trouver ton bonheur ici Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 18 décembre 2006 Posté(e) le 18 décembre 2006 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 informatiqueen a perdu la trace... ne prenez pas la Tangente en cas de Sinusite. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Didier-AD Posté(e) le 20 décembre 2006 Posté(e) le 20 décembre 2006 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 sinusen 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)
(gile) Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 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
Didier-AD Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 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 !
interpmanu Posté(e) le 26 janvier 2007 Auteur Posté(e) le 26 janvier 2007 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))))))
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant