Les opérations mathématiques
Les opérations mathématiques sont parmi les premières choses qu'on utilise dans un langage de programmation. En AutoLISP, elles suivent la même syntaxe préfixée que toutes les autres fonctions — et elles réservent quelques particularités intéressantes.
Les quatre opérations de base
Addition : +
(+ 2 3) ; → 5
(+ 10 20 30) ; → 60 (on peut additionner plus de 2 nombres !)
(+ 1.5 2.3) ; → 3.8
Un avantage de la notation préfixée : la fonction + accepte autant d'arguments que vous le souhaitez. Pas besoin d'écrire (+ (+ 10 20) 30) : un simple (+ 10 20 30) suffit.
Soustraction : -
(- 10 3) ; → 7
(- 100 20 30) ; → 50 (100 - 20 - 30)
(- 5) ; → -5 (avec un seul argument, retourne l'opposé)
Multiplication : *
(* 3 4) ; → 12
(* 2 3 4) ; → 24
(* 1.5 2) ; → 3.0
Division : /
(/ 20 4) ; → 5
(/ 7 2) ; → 3 (division entière !)
(/ 7.0 2) ; → 3.5 (division réelle)
(/ 7 2.0) ; → 3.5 (division réelle aussi)

Attention : la division entière
C'est un piège classique en AutoLISP (et dans beaucoup d'autres langages). Quand les deux opérandes sont des entiers, la division retourne un entier — la partie décimale est tronquée :
(/ 7 2) ; → 3 (et non 3.5 !)
(/ 1 3) ; → 0 (et non 0.333... !)
Pour obtenir un résultat décimal, il suffit qu'au moins un des opérandes soit un nombre réel (avec un point décimal) :
(/ 7.0 2) ; → 3.5
(/ 7 2.0) ; → 3.5
Vous pouvez aussi utiliser la fonction float pour convertir un entier en réel :
(/ (float 7) 2) ; → 3.5
Le reste de la division : rem
La fonction rem (remainder) retourne le reste de la division entière :
(rem 7 2) ; → 1 (7 = 2×3 + 1)
(rem 10 3) ; → 1 (10 = 3×3 + 1)
(rem 8 4) ; → 0 (division exacte)
C'est utile pour vérifier si un nombre est pair :
(rem 6 2) ; → 0 (pair)
(rem 7 2) ; → 1 (impair)
Fonctions mathématiques avancées
AutoLISP propose de nombreuses fonctions mathématiques supplémentaires :
Valeur absolue : abs
(abs -5) ; → 5
(abs 3) ; → 3
(abs -3.14) ; → 3.14
Puissance : expt
(expt 2 3) ; → 8 (2³)
(expt 5 2) ; → 25 (5²)
(expt 9 0.5) ; → 3.0 (racine carrée de 9)
Racine carrée : sqrt
(sqrt 16) ; → 4.0
(sqrt 2) ; → 1.41421
Minimum et maximum : min, max
(min 3 7 1 9) ; → 1
(max 3 7 1 9) ; → 9
Fonctions trigonométriques
AutoLISP travaille en radians, pas en degrés :
(sin 0) ; → 0.0 (sinus)
(cos 0) ; → 1.0 (cosinus)
(atan 1) ; → 0.785398 (arc tangente, soit π/4)
Pour convertir des degrés en radians, utilisez cette formule :
;; Conversion de 90° en radians
(* (/ 90.0 180) pi) ; → 1.5708 (π/2)
La constante pi est prédéfinie en AutoLISP et vaut environ 3.14159.
Logarithmes et exponentielle
(log 1) ; → 0.0 (logarithme naturel)
(log 2.718) ; → 0.999896
(exp 1) ; → 2.71828 (e¹)
(exp 0) ; → 1.0 (e⁰)
Conversions de types
Quand vous mélangez des entiers et des réels, il est parfois utile de convertir explicitement :
(float 5) ; → 5.0 (entier → réel)
(fix 3.7) ; → 3 (réel → entier, tronque la partie décimale)
(fix 3.2) ; → 3
(fix -3.7) ; → -3
La fonction fix tronque (elle ne fait pas d'arrondi). Pour arrondir au plus proche, vous pouvez combiner fix et + :
;; Arrondi au plus proche
(fix (+ 3.7 0.5)) ; → 4
(fix (+ 3.2 0.5)) ; → 3
Un exemple pratique : aire d'un cercle
Calculons l'aire d'un cercle de rayon 5 :
;; Aire = π × r²
(* pi (expt 5.0 2)) ; → 78.5398
Affichons le résultat dans une boîte de dialogue :
(alert
(strcat "L'aire du cercle est : "
(rtos (* pi (expt 5.0 2)) 2 2)
)
)

Décortiquons cette expression :
(expt 5.0 2)→25.0(5²)(* pi 25.0)→78.5398(π × 25)(rtos 78.5398 2 2)→"78.54"(convertit le nombre en chaîne avec 2 décimales)(strcat "L'aire du cercle est : " "78.54")→ concatène les deux chaînes(alert ...)→ affiche le résultat
La fonction rtos (real to string) et strcat (string concatenate) seront détaillées plus tard. Pour l'instant, retenez simplement qu'on peut combiner des calculs et de l'affichage en imbriquant les expressions.
Résumé
| Fonction | Description | Exemple |
|---|---|---|
+ |
Addition | (+ 2 3) → 5 |
- |
Soustraction | (- 10 3) → 7 |
* |
Multiplication | (* 3 4) → 12 |
/ |
Division | (/ 7.0 2) → 3.5 |
rem |
Reste (modulo) | (rem 7 2) → 1 |
abs |
Valeur absolue | (abs -5) → 5 |
expt |
Puissance | (expt 2 3) → 8 |
sqrt |
Racine carrée | (sqrt 16) → 4.0 |
min / max |
Minimum / Maximum | (max 3 7) → 7 |
float |
Entier → Réel | (float 5) → 5.0 |
fix |
Réel → Entier | (fix 3.7) → 3 |
Dans le prochain chapitre, nous verrons comment stocker des valeurs dans des variables et manipuler les différents types de données d'AutoLISP.
Besoin d'un développement AutoCAD (AutoLISP, ObjectARX, .NET, VBA) ? Contactez-moi pour un devis gratuit.