(gile) Posté(e) le 10 août 2006 Posté(e) le 10 août 2006 Quelques petites routines utiles quand on manipule les angles, la plupart ont été publiées éparpillées dans différents LISP sur le site. Les classiques fonctions de conversions : ;;; D2R Convertit les degrés en radians (defun d2r (ang) (* (/ ang 180.0) pi) ) ;;; R2D Convertit les radians en degrés (defun r2d (ang) (* (/ ang pi) 180) ) ;;; G2R Convertit les grades en radians (defun g2r (ang) (* (/ ang 200.0) pi) ) ;;; R2G Convertit les radians en grades (defun r2g (ang) (* (/ ang pi) 200) ) Comme AutoCAD calcule en radians, il est plus simple de faire aussi les calculs dans cette unité.Pour les routines suivantes, les angles sont donc exprimés en radians. Les principales fonctions trigonométriques qui ne sont pas pré-définies en AutoLISP : ;;; ASIN et ACOS Retournent l'arc sinus ou cosinus du nombre, en radians (ou nil) (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)))) ) ) ) (defun ACOS (num) (cond ((equal num 1 1e-9) 0.0) ((equal num -1 1e-9) pi) (( (atan (sqrt (- 1 (expt num 2))) num) ) ) ) ;;; TAN Retourne la tangente de l'angle ;;; Nota : (cos (/ pi 2)) retourne 6.12323e-017 à la place de 0.0 (defun tan (ang) (/ (sin ang) (cos ang)) ) Pour évaluer si un angle est nul ou plat (0° ou 180°) ;;; EQUALKPI - Évalue si un angle est égal à k*pi radians à 0.000000001 près. (defun equalkpi (ang) (or (equal (rem ang pi) 0 1e-009) (equal (abs (rem ang pi)) pi 1e-009) ) ) Pour récupérer l'angle entre un sommet et deux autres points dans le plan défini par ces trois points ("Théorème de Carnot"). ;;; ANGLE_3PTS Retourne l'angle (radians) défini par son sommet et deux points ;;; (ou nil si un des points est confondu avec le sommet) ;;; L'angle retourné est toujours positif et inférieur à pi radians. (defun angle_3pts (som p1 p2 / d1 d2 d3) (setq d1 (distance som p1) d2 (distance som p2) d3 (distance p1 p2) ) (if (and ( (ACOS (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3))) (* 2 d1 d2) ) ) ) ) Quand on additionne ou qu'on soustrait des angles, le résultat n'est pas toujours compris entre 0 et 2*pi radians, et il est souvent nécessire de le convertir dans ces valeurs (à "2 k pi près") pour pouvoir faire des comparaisons avec d'autres angles. ;;; Ang;;; (ang 0.0 ;;; (ang 3.14159 (defun ang (if (and ( ang (ang ) ) [Edité le 21/12/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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