Aller au contenu

[Résolu] Problème récupération de l'angle d'une ligne


Messages recommandés

Posté(e)

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

Posté(e)

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.

Posté(e)

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

Posté(e)

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

 

 

 

 

 

Posté(e)

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

Posté(e)

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.

 

@+

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

Posté(e)

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.

Posté(e)

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

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é