nounours44 Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Bonjours a tous, j'ai un problème avec la valeur retourner par cette commande: (setq ang (angle depart fin)) elle me retour par moment un résultat du genre 1.82424e-016 pour une ligne horizontale ce qui empeche le traitement de la ligne. ma question est: est-ce normale?y a t'il une solution pour récupérer une valeur normal comme 0 ou pi? merci de vos réponse. cordialement
didier Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Coucou je me permets de poser en pièce jointe un extrait du bouquin que j'ai écrit et qui traite de la programmation pour débutants en AutoLisp je ne sais pas comment éditer ce travail dis-moi si mon fichier t'a aidé, s'il te plaît. amicalement page angle.pdf Éternel débutant... Mon site perso : Programmer dans AutoCAD
nounours44 Posté(e) le 17 octobre 2014 Auteur Posté(e) le 17 octobre 2014 Didier merci de t'a réponse rapide mais qui ne me donne pas plus d'indication sur le résultat retourner par la commande. voici un bout de code qui vous donneras j’espère plus d'indication. ;récupération du nombre d'objet dans le jeu de sélection (setq nbobj (sslength js)) ;mise à 0 dans indice pour partir du début du jeu de sélection (setq ind 0) ;création de la boucle pour traiter tous les objets (repeat nbobj (setq ligne (ssname js ind)) ; récupération du X,Y,Z du début de la ligne (setq depart (cdr (assoc 10 (entget (ssname js ind))))) ; récupération du X,Y,Z de la de la ligne (setq fin (cdr (assoc 11 (entget (ssname js ind))))) ; récupération du calque (setq calque (cdr (assoc 8 (entget (ssname js ind))))) ;calcul de l'angle de la ligne (en radian) (setq ang (angle depart fin)) ;condition si la ligne est horizontale ; si oui on exécute le sous programme VERIFCOUP (if (or (= ang 0) (= ang pi)) (verifcoup) ) ce qui me gêne c'est le résultat qui arrive sous cette forme 1.82424e-016 que pour certaine ligne.
Patrick_35 Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Salut Pour convertir des radians en degrée(* 180.0 (/ 1.82424e-016 pi)) Pour voir le nombre de 0(rtos (* 180.0 (/ 1.82424e-016 pi)) 2 16) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Coucou un tel résultat signifie que l'angle de ta ligne est très proche du zéro mais pas égal en nombre réel ton exemple s'écrit : 0.0000000000000002 je te conseille de regarder du côté de FUZZ pour contrôler l'égalité à zéro amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
nounours44 Posté(e) le 17 octobre 2014 Auteur Posté(e) le 17 octobre 2014 merci pour vos réponse je ne connait pas FUZZ mais je vais regarder. donc comment je peut tracer une droite qui n'est pas parfaitement droite alors que je bloque les axes quand je dessine. c'est bizzard
didier Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Coucou droite qui n'est pas parfaitement droite tu parles de droite, de ligne ? c'est sans doute un souci d'accrochage objet car une ligne dessinée en ortho par exemple renvoie un angle de 0.00000000000 par rapport à l'axe des X le "souci" de la programmation c'est qu'il faut prendre en compte ces erreurs infimes. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 17 octobre 2014 Posté(e) le 17 octobre 2014 Hello Didier >>> ... le souci de la programmtion ... Quel souci ? Dans notre jeunesse nous avons appris a utiliser la regle a calcul, n'est ce pas ? Aucun souci de programmation !!Bye, lecrabe Autodesk Expert Elite Team
nounours44 Posté(e) le 20 octobre 2014 Auteur Posté(e) le 20 octobre 2014 bonjour a tous et merci de votre aide. J'ai réussi a résoudre mon problème mais un deuxième est venue gâcher un peut ma joie. en effet le nouveau problème que j'ai est avec la commande inters. cette commande ne me donner pas a chaque fois les intersection de deux ligne. par exemple une ligne horizontale est couper par deux ligne vertical. donc il y a deux intersection. la commande devrais me retourner les coordonné des intersections mais pour une des deux tout vas bien alors que pour l'autre j'ai NIL en retour. je pense a un problème de construction des ligne mais en même temps je ne vois pas le problème. si une âme charitable peut ce penché sur mon nouveau problème ce serais sympa. @+
didier Posté(e) le 20 octobre 2014 Posté(e) le 20 octobre 2014 CoucouQuel souci ? Dans notre jeunesse nous avons appris a utiliser la regle a calcul, n'est ce pas ? c'est bien vrai ça, et sur cette dernière je n'ai jamais trouvé la huitième décimale (hihi) amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
bonuscad Posté(e) le 20 octobre 2014 Posté(e) le 20 octobre 2014 donc il y a deux intersection. la commande devrais me retourner les coordonné des intersections mais pour une des deux tout vas bien alors que pour l'autre j'ai NIL en retour. la commande (inters) a soit 5 arguments (le cinquième ayant une valeur par défaut si omis)Les arguments sont dans l'ordre:- les 2 points d'extrémité de la 1ere ligne- les 2 points d’extrémité de la 2eme ligne- un argument qui est T ou nil (T si omis) Ce dernier argument te calculera l'intersection étendue au delà des extrémités s'il a pour valeur nil.Si il n'est pas fourni, seule l'intersection effective des 2 lignes sera recherchée. Ce qui peut se passer aussi, c'est que si les points fournis sont sous la forme (X Y Z), l'intersection 3D sera recherchée. Il suffit que tu ais un delta Z infime (comme pour ton problème d'angle) pour que la fonction (inters) échoue. Soit tu ne soumet que le (X Y) de tes lignes à (inters) pour avoir l'intersection projetée (sans Z), soit tu corrige le Z de ta ligne... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nounours44 Posté(e) le 20 octobre 2014 Auteur Posté(e) le 20 octobre 2014 merci bonuscad pour cette réponse claire et rapide. je teste tout de suite et vous tient au courant.
nounours44 Posté(e) le 20 octobre 2014 Auteur Posté(e) le 20 octobre 2014 merci bonuscad ta solution fonctionne parfaitement. mais quand un problème est résolu un autre apparaît, maintenant que je récupère bien mes angle ces quand je teste si la ligne est bien vertical que le test ne fonctionne pas.voici le test en question (if (or (= ang1 (* 0.5 pi))(= ang1 (* 1.5 pi))) (traitcoup);alors aller vers traitcoup) pour info ang1 = 4.71239 donc je ne comprend pas pourquoi il ne rentre pas dans le if alors que j'ai d'autre ligne vertical qui ne pose aucun problème. désoler de vous ennuyer avec mes question.
bonuscad Posté(e) le 20 octobre 2014 Posté(e) le 20 octobre 2014 Tu utilise la fonction (= arg1 arg2) qui est une fonction stricte d'égalité.Comme suggéré dans les posts précédents, utilise la fonction (equal arg1 arg2 fuzz) qui te permet de testé l'égalité avec une tolérance (fuzz) sur les décimales: 0.000001 ou 1E-5 par exemple Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nounours44 Posté(e) le 20 octobre 2014 Auteur Posté(e) le 20 octobre 2014 merci bonuscad pour cette réponse rapide et efficace je suis trop nul je n'y avait même pas songer
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