jfcantin1977 Posté(e) le 9 octobre 2009 Posté(e) le 9 octobre 2009 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]
zebulon_ Posté(e) le 9 octobre 2009 Posté(e) le 9 octobre 2009 Bonjour, regarde les fonctions angtof et angtos AmicalementVincent 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)
jfcantin1977 Posté(e) le 9 octobre 2009 Auteur Posté(e) le 9 octobre 2009 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
zebulon_ Posté(e) le 9 octobre 2009 Posté(e) le 9 octobre 2009 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. AmicalementVincent 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)
didier Posté(e) le 9 octobre 2009 Posté(e) le 9 octobre 2009 coucou je pense que le souci vient du faitque tu demandes de stocker ta variable AngleDMSsous forme de Chaîne de caractères (getstring) essaie en utilisant GETREAL ... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 9 octobre 2009 Posté(e) le 9 octobre 2009 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
jfcantin1977 Posté(e) le 13 octobre 2009 Auteur Posté(e) le 13 octobre 2009 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]
(gile) Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 DMS2Rad requiert un argument de type chaîne (STR) au format "DD.MMSS". Remplace :(DMS2Rad)par :(DMS2Rad AngleDMS) 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