Les fonctions: MAKE-ROT.LSP

;************************************************************************
;* [CMFAO] AME 6602 ACQUISITION DES DONNÉES SPATIALES                   *
;* [GRCAO] Claude Parisel                                               *
;* Mars 1999                                                            *
;************************************************************************
; MAKE-ROT
; Calcul d'un ensemble de rotations dans l'ordre choisi
; et retour de la matrice dans cet ordre
;------------------------------------------------------------------------
; retour liste des paramètres des rotations successives :liste de liste
; op paramètres de chaque rotation:liste
; mattrans matrice de rotation
; long nombre de rotations
; c compteur
;------------------------------------------------------------------------
; RETOUR:
; MATTRANS  matrice de rotation globale
;---------------------------------------------------------------------
(defun make-rot (retour / c op long)

  ;initialisation de la matrice
  ;---------------------
  (setq mattrans (mat-i 4))

  ;traitement de la boucle
  ;--------------------------
  (setq long (length retour))
  (setq c 0)
  (while
    (< c long)
    (setq op (nth c retour))
    (if
      (= (car op) "X")
      (setq mattrans (mat-mul mattrans (mat-rotx (last op))))
    )
    (if
      (= (car op) "Y")
      (setq mattrans (mat-mul mattrans (mat-roty (last op))))
    )
    (if
      (= (car op) "Z")
      (setq mattrans (mat-mul mattrans (mat-rotz (last op))))
    )
    (if
      (= (car op) "Q")
      (setq mattrans (mat-mul mattrans (mat-rotq (cdr op))))
    )
    (setq c (+ c 1))
  )
  ;Retour
  ;------
  mattrans
)
;---------------------------------------------------------------------------
; Exemple:
; Command: (make-rot "X" 30)
;         
((1.0 0.0 0.0 0.0) (0.0 0.866025 0.5 0.0) (0.0 -0.5 0.866025 0.0)
;           (0.0 0.0 0.0 1.0))
;----------------------------------------------------------------------------