fabien034 Posté(e) le 19 mars 2013 Posté(e) le 19 mars 2013 Bonjour à tous, J'aurais voulu savoir s'il y avais une possibilité de mettre une condition sur des erreurs de calcul (ex erreur: division par zéro). Pour vous donnez un des exemples, dans mon lisp je fait calculer les coordonnées des points d'intersection entre deux cercle, sauf que dans la formule on prend comme hypothèse que les deux cercle se croisent, ceux qui est vrai pour une bonne partie de mes cercles, mais certain peuvent être inscrit l'un dans l'autre. En gros j'aimerais pouvoir lui dire que si il y a une erreur dans le calcul, qu'il fasse autre chose, mais je ne sais pas comment lui dire :(. Je sais pas si ça peut aider a la comprehension mais voici le code pour l'intersection entre deux cercle ;; Calcul coordonnée des point d'intersection entre deux cercle ;; Pt1 (x1;y1) coordonnée du centre du cercle 1 r1 rayon du cercle 1 ;; Pt2 (x2;y2) coordonnée du centre du cercle 2 r2 rayon du cercle 2 ;; ;; Result: *Pta* (xa;ya) coordonnée du premier point d'intersection ;; Result: *Ptb* (xb;yb) coordonnée du second point d'intersection (defun intersection_cercle (pt0 r0 pt1 r1 / x0 y0 x1 y1 SoustX SoustY Val N A B C D xa ya xb ya ) (setq x0 (car pt0) y0 (cadr pt0) x1 (car pt1) y1 (cadr pt1) SoustX (- x0 x1) SoustY (- y0 y1) Val (/ SoustX SoustY) N (/ (+ (- (+ (- (- (puissance r1 2) (puissance r0 2) ) (puissance x1 2) ) (puissance x0 2) ) (puissance y1 2) ) (puissance y0 2) ) (* 2 SoustY) ) A (+ (puissance Val 2) 1) B (- (* 2 y0 Val) (* 2 N Val) (* 2 x0)) C (- (- (+ (+ (puissance x0 2) (puissance y0 2)) (puissance N 2)) (puissance r0 2) ) (* 2 y0 N) ) D (sqrt (- (puissance B 2) (* 4 A C))) xa (/ (+ (- B) D) (* 2 A)) ya (- N (* xa Val)) *pta* (list xa ya 0.0) xb (/ (- (- B) D) (* 2 A)) yb (- N (* xb Val)) *ptb* (list xb yb 0.0) ) )
Carboleum Posté(e) le 19 mars 2013 Posté(e) le 19 mars 2013 Le plus propre est de lui dire ceci (en gros): (setq c (if (/= b 0) (/ a B) (exit))) à la place de: (setq c (/ a B)) sinon, tu peux aller voir les fonctions *error* et vl-catch-all-error. Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
fabien034 Posté(e) le 19 mars 2013 Auteur Posté(e) le 19 mars 2013 Ha vi je vais déjà commencer part réécrire mes formules sous la forme de (setq c (if (/= b 0) (/ a B) (exit))) c'est vrai que c'est bien plus propre. Par contre je ne trouve pas la fonctions vl-catch-all-error
Patrick_35 Posté(e) le 19 mars 2013 Posté(e) le 19 mars 2013 Ha vi je vais déjà commencer part réécrire mes formules sous la forme de (setq c (if (/= b 0) (/ a B) (exit))) c'est vrai que c'est bien plus propre. Par contre je ne trouve pas la fonctions vl-catch-all-errorSalut Fais une recherche avec vl-catch-all-error-p ou vl-catch-all-apply @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabien034 Posté(e) le 19 mars 2013 Auteur Posté(e) le 19 mars 2013 Un grand merci, c'est exactement ce que je cherchais :D
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