polo77 Posté(e) le 16 mars 2006 Posté(e) le 16 mars 2006 bonjour a tousje cherche une routine lisp qui me permette a partir de 3 points de definir l'angle inferieurmais elle ne fonctionne pas systematiquement parce que si l'angle de a b < pi et b c > pi*1.5 l'angle est mal defini (le resultat de ma fonction doit etre le meme que qu'avec la fonction cot angulaire mais sans definir d'entite temporaire)pourriez vous m'aidez a corriger cette fonction. ou evidement m'en proposer une meilleur. pour l'instant j'ai fais cela : (defun ctrl-ang (a b c / ADIR2 ABASE2 ANG2 ANG3 AU2 ang4 ang5) (setq ADIR2 (getvar "ANGDIR") ABASE2 (getvar "ANGBASE") ) (setq ANG2 (angle a b) ANG3 (angle c b)) (if (< Pi (abs (- ANG2 ANG3))) (setq ANG4 (abs (- ANG2 ANG3 Pi))) (setq ANG4 (abs (- ANG2 ANG3))) ) (setq ANG5 (- Pi ANG4) AU2 (getvar "AUNITS") ) (setq ang4 (angtos (abs ang4)) ang5 (angtos (abs ang5))) (itoa (min (atoi ang4) (atoi ang5))))
Tramber Posté(e) le 16 mars 2006 Posté(e) le 16 mars 2006 Si j'ai bien compris, tu as besoin de maitriser la fonction REM ?! Voir ici. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
polo77 Posté(e) le 16 mars 2006 Auteur Posté(e) le 16 mars 2006 Si j'ai bien compris, tu as besoin de maitriser la fonction REM ?! Voir ici. je pense avoir quelques affinites avec rem peux tu developper ta reponses stp ?
(gile) Posté(e) le 16 mars 2006 Posté(e) le 16 mars 2006 Salut, Tu trouveras un LISP ici (angle_3pts) qui retourne l'angle relatif décrit par 3 points dans le plan défini par ces 3 points, quelque soit ce plan par rapport au SCU courant (le premier point est le sommet). (angle_3pts '(0 0 0) '(1 0 0) '(1 1 0)) retourne 0.785398 radians (soit 45°) (angle_3pts '(0 0 0) '(1 1 0) '(1 0 0)) retourne aussi 0.785398 radians (soit 45°) (angle_3pts '(0 0 0) '(1 0 0) '(1 0 1)) retourne aussi 0.785398 radians (soit 45°) angle_3pts utilise les routines vec1 et asin définies dans le même sujet. Plus proche de ta méthode (ne fonctionne qu'en 2D): (setq ang (- (angle sommet point1) (angle sommet point2))) ;; si l'angle est négatif : (if (minusp ang) (setq ang (+ (* 2 pi) ang)) ) ;; si l'angle est plus grand que pi radians : (if ((setq ang (- (* 2 pi) ang)) ) Çà devrait marcher quelques soient les valeurs de ANGDIR et ANGBASE. PS : Le setq et le premier if c'est un peu la méthode de Serge (le lien de Tramber), c'est peut-être plus facile à comprendre, mais tellement moins élégant, sacré Serge !Le second if, c'est pour que soit retourné 45° au lieu de 315° [Edité le 16/3/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 16 mars 2006 Posté(e) le 16 mars 2006 Un autre exemple de l'utilisation de rem avec des angles : ;;; 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) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 je pense avoir quelques affinites avec rem peux tu developper ta reponses stp ? C'était juste un lien rapide pour t'aider à faire ta sauce. Les problèmes d'angles m'ont toujours embrouillé !!! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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