Aller au contenu

Jouer avec les angles


Messages recommandés

Posté(e)

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

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é