Aller au contenu

Messages recommandés

Posté(e)

bonjour a tous

je cherche une routine lisp qui me permette a partir de 3 points de definir l'angle inferieur

mais 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)))

)

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)
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 ?

Posté(e)

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

Posté(e)

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

Posté(e)
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

 

./__\.
(.°=°.)

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é