Invité ingoenius Posté(e) le 6 avril 2006 Posté(e) le 6 avril 2006 comment sortir de autolisp l'angle en degres entre 3 points? (de la meme facon que l'utilkisation de la commande cotation angulaire) selenctionnant les trois point successivement? et de plus, est possible en une seule commande faire un fillet sur tous les aretes d'un solide?? merci
(gile) Posté(e) le 6 avril 2006 Posté(e) le 6 avril 2006 Salut, Tu peux aller voir ici. Tu peux aussi appeler la calculatrice géométrique : (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (cal "ang(p1,p2,p3)") NOTA : dans le premier cas l'angle est retouné en radians, dans le second en degrés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 6 avril 2006 Posté(e) le 6 avril 2006 Difficile de faire plus court qu'avec la fonction (cal) :( mais bon, une autre méthode parmis tant d'autres. ((lambda ( / px p1 p2 msg l_pt l_d p ang) (initget 9) (setq px (getpoint "\nPoint au sommet: ") p1 px p2 px msg '("p1" "\n1er point: " "p2" "\n2ème point: ")) (foreach n (list p1 p2) (while (equal px n) (initget 9) (setq n (getpoint px (cadr msg))) (if (equal px n) (princ "\nLe point est confondu au sommet!") ) ) (set (read (car msg)) n) (setq msg (cddr msg)) ) (setq l_pt (mapcar '(lambda (x) (list (car x) (cadr x))) (list px p1 p2)) l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt)))) p (/ (apply '+ l_d) 2.0) ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0) ) (alert (strcat "Angle exprime en fonction des unites actives" "\nAngle: <" (angtos ang (getvar "AUNITS") (getvar "AUPREC")) ">" "\nComplémentaire à " (angtos pi (getvar "AUNITS") 0) ": <" (angtos (- pi ang) (getvar "AUNITS") (getvar "AUPREC"))">" ) ) (print (angtos ang (getvar "AUNITS") (getvar "AUPREC"))) (prin1) )) [Edité le 7/4/2006 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 6 avril 2006 Posté(e) le 6 avril 2006 Très joli coup, j'aime beaucoup la méthode. Dans le même esprit mais pour un fonctionnement en 3D : ;;; VEC1 Retourne le vecteur normé (1 unité) de p1 à p2 (nil si p1 = p2) (defun vec1 (dep ext) (if (not (equal dep ext 1e-009)) (mapcar '(lambda (x) (/ x (distance dep ext))) (mapcar '- ext dep) ) ) ) ;;; ASIN Retourne l'arc sinus du nombre, en radians (defun ASIN (num) (if ( (atan num (sqrt (- 1 (expt num 2)))) (princ "\nErreur: L'argument pour ASIN doit être compris entre -1 et 1" ) ) ) ;;; ANGLE_3PTS Retourne l'angle (radians) défini par son sommet et deux points ;;; L'angle retourné est toujours positif et inférieur à pi radians. (defun angle_3pts (som p1 p2 / v1 v2) (if (and (setq v1 (vec1 som p1)) (setq v2 (vec1 som p2)) ) (cond ((equal v1 v2 1e-009) 0.0) ((equal v1 (mapcar '- v2) 1e-009) pi) (T (* 2 (asin (/ (distance v1 v2) 2)))) ) (Prompt "\nErreur: points confondus.") ) ) ;;; C:ANG_3PTS Affiche l'angle 3D défini par 3 points (defun c:ang_3pts (/ som pt1 pt2 ang) (initget 1) (setq som (getpoint "\nSpécifiez le sommet de l'angle: ")) (initget 1) (setq pt1 (getpoint som "\nSpécifiez la première extrémité: ")) (initget 1) (setq pt2 (getpoint som "\nSpécifiez la seconde extrémité: ")) (if (setq ang (angle_3pts som pt1 pt2)) (princ (strcat "\nAngle: " (angtos ang) " ou: " (angtos (- (* 2 pi) ang)) ) ) ) (princ) ) [Edité le 6/4/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 6 avril 2006 Posté(e) le 6 avril 2006 Très joli coup, j'aime beaucoup la méthode. Merci, mais pour faire cela j'ai ressorti mes formulaires de cours, (ils ont jaunis, depuis temps :o )Donc quand tu as la formule, y a pas bien d'honneur! Mais moi aussi j'aime bien ce mode calcul, car il me dispense du test du 4ème et du 1er quadrant trigo.Je vais modifier mon ancienne routine (qui fonctionne en sélectionnant des segments droits), pour y appliquer cette méthode. Merci de ta présence sur le forum, qui me stimule lors de mes réflexions sur les méthodes que je pourrais utiliser. ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 7 avril 2006 Posté(e) le 7 avril 2006 Merci de ta présence sur le forum, qui me stimule lors de mes réflexions sur les méthodes que je pourrais utiliser. Quand la stimulation est réciproque, c'est de l'émulation, non ? ;) Ta méthode m'en a rappelé une autre, et m'inspire une suggestion : en récupérant les distances entre les points directement avec (distance ... ta routine devrait fonctionner en 3D. Autre façon d'afficher l'angle entre 3 points : ;;; ACOS Retourne l'arc cosinus du nombre, en radians (defun ACOS (num) (if ( (atan (sqrt (- 1 (expt num 2))) num) (princ "\nErreur: L'argument pour ACOS doit être compris entre -1 et 1" ) ) ) ;;; C:ANG_3PTS Affiche l'angle défini par 3 points 3D (defun c:ang_3pts (/ som pt1 pt2 d1 d2 d3 ang) (initget 1) (setq som (getpoint "\nSpécifiez le sommet de l'angle: ") pt1 som pt2 som ) (while (equal pt1 som) (initget 1) (setq pt1 (getpoint som "\nSpécifiez la première extrémité: ")) ) (while (equal pt2 som) (initget 1) (setq pt2 (getpoint som "\nSpécifiez la seconde extrémité: ")) ) (setq d1 (distance som pt1) d2 (distance som pt2) d3 (distance pt1 pt2) ) (setq ang (ACOS (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3))) (* 2 d1 d2) ) ) ) (princ (strcat "\nAngle: " (angtos ang) " ou: " (angtos (- (* 2 pi) ang)) ) ) (princ) ) Encore une fois un grand merci à Bonuscad et Pythagore. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 7 avril 2006 Posté(e) le 7 avril 2006 merci, vous ete vraiment tres forts !! ;-) je pense que je vais apprendre beaucoup dans ce forum
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