Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous...

 

Je veux utiliser une petite fonction qui pourra convertir mon angle en degré minute seconde en Radian...

 

Je veux utiliser un truc du genre...

 

(defun d2r (AngleDMS)

(* (/ AngleDMS 180.0) pi)

)

 

(princ d2r)

 

mon problème est que si j'entre une angle 12.3456 j'arrive au résultat suivant:

SUBR @0447e438 D2R>#

 

Je devrai arriver à 0.219601205

 

 

J'ai essayé différente facon d'entrer mon angle (12,3456, <12d34'56") et rien ne fonctionne...

 

 

Voici la totalité de mon code.

 

 

(defun c:Jeff ()

 

(setq ptj1 (getpoint "Piquer le Point de Départ:")) ; Prend la coordonnée du premier point

 

(setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))

 

;; conversion des degrés en radians

(defun d2r (AngleDMS)

(* (/ AngleDMS 180.0) pi)

)

 

(princ d2r)

)[Edité le 9/10/2009 par jfcantin1977]

 

[Edité le 9/10/2009 par jfcantin1977]

Posté(e)

Bonjour,

 

regarde les fonctions angtof et angtos

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Bonjour..

 

J'avais remarqué ces fonctions... mais je croyais que ma facon était meilleur hahahaha

 

 

Ok j'ai essayé la fonction Angtof mais j'arrive à ce résultat:

1.355321.35532

 

J'ai vérifier l'exemple et si je mets 45.0000 j'arrive au bon résultat mais si j'entre l'angle 12.3456 alors j'arrive à 1.355321.35532

 

(defun c:Jeff ();/ AngleDMS nb_c result)

 

(setq ptj1 (getpoint "Piquer le Point de Départ:")) ; Prend la coordonnée du premier point

 

(setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))

 

(princ ( angtof AngleDMS)

)

 

merci de ton aide

Posté(e)

Re,

 

il faut regarder la documentation fournie dans l'aide de l'éditeur lisp concernant ces fonctions. En effet, on peut indiquer le mode (degrés, degrés/mn/sc, etc...) afin de les utiliser à bon escient.

 

(angtos (/ pi 2) 0 4) retourne "90"

 

le 0 pour le mode degrés et le 4 pour la précision. Si on veut "90.0000", il faut d'abord régler la variable DIMZIN à 0 (comme pour la fonction rtos)

 

(angtos (/ pi 2) 1 4) retourne 90d0'0" en degré, minutes et secondes

 

Et la fonction angtof et complémentaire à la précédente

 

(angtof "90d0'0\"" 1) retourne 1.5708 en radians.

 

Le problème qui se pose dans ton lisp est que la chaine analysée par angtof doit être formatée correctement (voir ci dessus), à savoir le d pour les degrés, le ' pour les minutes et le " pour les secondes et il manque l'indication du mode (mode=1 pour des degrés,minutes,secondes)

 

Voilà, n'hésite pas à consulter l'aide de ces fonctions. Tu y trouveras toute les valeurs de mode ainsi que les formats de chaines qui leur sont compatibles.

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut,

 

Tu avais été prévenu dans ce sujet du risque engendré par l'utilisation d'un format personnalisé pour les unités angulaires (DD.MMSS).

 

Quand on fait de la programmation il faut toujours avoir à l'esprit qu'on parle à une machine qui, si elle peut faire très rapidement des calculs complexes, est incapable de deviner quoi que ce soit.

 

AutoLISP ne sait rien de ton format DD.MMSS.

 

Pour l'interpréteur AutoLISP, la valeur retournée par (getstring ...) est une chaîne de caractère comme "12" "12.3650" ou "toto".

 

Suivant le contenu de la chaîne, elle peut ou non être convertie dans un autre type :

(atoi "12") retourne un entier : 12

 

(atof "12.3650") retourne un réel : 12.365

 

(angtof "12.3650") retourne un réel correspondant à un angle convertit en radians en fonction de la valeur de la variable AUNITS :

- 0.21581 si AUNITS est à 0 (degrés décimaux), mais aussi si AUNITS est à 1 (degrés sexagésimaux) ou 4 (unités géodésiques)

- 0.194229 si AUNITS est à 2 (grades)

- 6.08181 si AUNITS est à 3 (radians)

 

Pour les degrés sexagesimaux (comme pour les unités géodésiques) angtos ne reconnait que les chaînes dont le format est : "12d36'50""

(angtof "12d36'50\"") retourne 0.220154

 

Donc si tu veux vraiment utiliser un format différent de ceux définis par AutoLISP il que tu fasses toi même dans ton code la traduction de ce format dans un format que l'interpréteur connaît.

 

Tu peux te faire une routine qui traduit une chaîne de ton format DD.MMSS en format sexagésimal tel que reconnu par AutoCAD et convertit ensuite le résultat en radians.

Par exemple comme celle-ci (attention il n'y a aucun contrôle de validité de l'argument).

 

(defun DMS2Rad (str / pos)
 (setq pos (vl-string-search "." str))
 (angtof
   (strcat (substr str 1 pos)
           "d"
           (substr str (+ 2 pos) 2)
           "'"
           (substr str (+ 4 pos) 2)
           "\""
   )
   1
 )
)

 

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Rebonjour à tous....

 

Vais-je y arriver....??

 

J'ai modifier certain variable pour utiliser la routine de gile mais j'arrive toujours à une erreur. Je travail à réussir à faire fonctionner le Debug... :(

J'ai donc copier le code sans modification...

 

Pour que la routine fonctionne et que DMS2Rad arrive à 0.219601205 pour un angle de 12.3456. Je doit modifier quoi ??? Je m'y perds.

 

Et pour ce qui est de la remarque de gile au sujet qu'on m'avais prévenue du fait que j'utilisais un variable en String... Et bien je croyais qu'il pouvait être simple de convertir un varaible String en Double enfin en numérique. Je programme en VB.Net et je ne croyais pas que cela pouvais engendrer ces problèmes... J'essairai de ne plus faire cet erreur héhéhéhé Merci...

 

 

(defun c:Jeff ()

 

(setq ptj1 (getpoint "Piquer le Point de Départ:")) ; Prend la coordonnée du premier point

 

(setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))

 

(defun DMS2Rad (str / pos)

(setq pos (vl-string-search "." str))

(angtof

(strcat (substr str 1 pos)

"d"

(substr str (+ 2 pos) 2)

"'"

(substr str (+ 4 pos) 2)

"\""

)

1

)

)

 

(princ (DMS2Rad)

)

 

[Edité le 13/10/2009 par jfcantin1977]

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é