tiboulen Posté(e) le 1 avril 2008 Posté(e) le 1 avril 2008 attention mystere???je dessine un carre de 5.40 unitesje fais (setq pt1 (getpoint)) le premier point(setq pt2 (getpoint)) le deuxieme(setq dist1 (distance pt1 pt2)) j obtiens 5.40 ce qui est normal.mais ou c'est bizarre :(setq b (fix (/ dist1 0.60))) donne 8.0alors que (fix (/ 5.4 0.60)) est egal a 9.0!!!!
(gile) Posté(e) le 1 avril 2008 Posté(e) le 1 avril 2008 Salut, Ça vient sûrement de la valeur de dist1 qui doit être très légèrement inférieure à 5.4 Essaye (rtos dist1 2 16), tu auras sûrement un résultat du genre : "5.399999999999998" C'est normal, c'est probablement du à une très légère imprécision dans le calcul de la distance avec des points quelconques. Essaye la séquence suivante : on sélectionne un point quelconque à l'écran, depuis ce point on en calcule 2 autre en mode polaire avec des angles différents (0° et 60°) et la même longueur (5.4) (setq p1 (getpoint "\Cliquer un point quelconque: "))(setq p2 (polar p1 0.0 5.4))(setq p3 (polar p1 (/ pi 3) 5.4)) On calcule la distance du premier point au second et du premier au troisième (setq d1 (distance p1 p2)) -> 5.4(setq d2 (distance p1 p3)) -> 5.4 Ces distances ne seront pas forcément strictement égales (= d1 d2) -> nil(equal d1 d2 1e-13) -> T Tu peux utiliser la routine suivante pour arrondir un peu dist1. ;;; ROUND Arrondit à la valeur la plus proche en fonction de prec ;;; (round pi 0.01) -> 3.14 ;;; (round pi 1e-5) -> 3.14159 ;;; (round 5456.50 1.0) -> 5457.0 ;;; (round 5456.50 100.0) -> 5500.0 (defun round (num prec) (if (zerop prec) num (if (minusp num) (* prec (fix (- (/ num prec) 0.5))) (* prec (fix (+ (/ num prec) 0.5))) ) ) ) (rtos (round dist1 1e-13) 2 16) retourne "5.400000000000000" et (fix (/ (round dist1 1e-13) 0.60)) retourne 9 [Edité le 2/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 coucou je ne pense pas que ta distance soit EXCACTEMENT de 5.40il suffit que ce soit 5.3999 pour planter le calculessaie ceci (-(fix (/ dist 0.6))(/ dist 0.6))tu obtiens combien ? amicalement Éternel débutant... Mon site perso : Programmer dans 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