Aller au contenu

mettre une condition sur une erreur de calcul


Messages recommandés

Posté(e)

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)
 )
)

Posté(e)

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

Posté(e)

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

Salut

 

Fais une recherche avec vl-catch-all-error-p ou vl-catch-all-apply

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é