BiG_Midl

Fonction Catégorie Version
BIG 01 BiG_Midl Fonction Géométrique 1.0 - Janvier 2007

Description

But Retourne le point milieu entre 2 points, dans les 3 dimensions
Prototype (BiG_Midl Point1 Point2)
Argument Point1 - Coordonnées du 1er point - Liste -
Point2 - Coordonnées du 2ème point - Liste -
Retours Les coordonnées du point milieu. - liste -
Var. globales Néant
Description Retourne les coordonnées en X, Y et Z du point situé au milieu de deux points donnés.
Notes Si un des deux points ne possède pas de dimension en Z, la valeur retournée en Z sera 0.0, quelque soit la valeur en Z de l'autre point.
Exemples

Cliquer un 1er point quelconque à l'écran
Command:(setq Pt1 (Getpoint))
    (170.0 110.0 0.0)			;  Coordonnées du 1er point.
On donne directement les coordonnées du 2ème point :
Command:(setq Pt2 (list 200 130 50))
    (200 130 50)				 
Command:(setq mid (BiG_Midl Pt1 Pt2)) 
    (185.0 120.0 25.0)			 ;  C'est le résultat

Autre exemple :	
Command:(setq mid (BiG_Midl Pt1 Pt3)) 
	nil			 			 
    L'argument Pt3 est nul

Autre exemple :
On donne directement les coordonnées du 1er point.
Command:(setq Pt4 '(100 200 50))   (100 200 50)		
Command:(setq Pt5 '(list 400 500)) ;
    Il n'y a que 2 valeurs pour les coordonnées du second point :
    (400 500)				
Command:(BiG_Midl Pt4 Pt5) 
    (250.0 350.0 0.0)			 ;  C'est le résultat
Dans ce cas, la valeur en Z est retournée à zéro, 
puisqu'elle n'existe pas sur le 2ème point.

La fonction


   1-  (defun BiG_Midl (*Pt1 *Pt2 / xm ym zm List1)

   2-     (if
   3-        (and *Pt1 
   4-		      *Pt2 
   5-		      (listp *Pt1) 
   6-		      (listp *Pt2)
   7-        )
   8-        (progn
   9-          (setq xm (/ (+ (car *Pt1)   (car *Pt2))   2)
  10-                ym (/ (+ (cadr *Pt1)  (cadr *Pt2))  2)
  11-          )
  12-          (if (and (caddr *Pt1) (caddr *Pt2)) 
  13-            (setq zm (/ (+ (caddr *Pt1) (caddr *Pt2)) 2))
  14-            (setq zm 0.0)
  15-          )
  16-          (setq List1 (list xm ym zm))
  17-        )
  18-      )
  19-      List1  
  20-  )  
Lignes 2-7 : Vérifie si les 2 arguments *Pt1 et *Pt2 ne sont pas nuls et sont des listes.
Ligne 8:     Si oui,
Ligne 9 :       Stocke en xm la division par 2 de la somme des premiers atomes de chaque 
                        liste,  (les valeurs en X)
Ligne 10 :      Stocke en ym la division par 2 de la somme des seconds atomes de chaque 
                        liste,  (les valeurs en Y)
Ligne 12:       Si les 3èmes éléments des 2 arguments existent,
Ligne 13 :           Stocke en zm la division par 2 de la somme des 3èmes  atomes de 
                          chaque liste,  (les valeurs en Z)
Ligne 14 :           Sinon donne une valeur de 0.0 à zm
Ligne 16 :      Crée List1, une liste regroupant les 3 valeurs
Ligne 19 :    Retourne la liste ou nil


Listp : Retourne T si *List1 est une liste, nil dans les autres cas.
Car : Renvoie le premier élément d'une liste.
Cdr : Renvoie une liste contenant tous les éléments de cette liste sauf le premier.
Cadr : Second élément d'une liste - Equivaut à (car (cdr *Pt1))
Caddr : 3ème élément d'une liste - Equivalent à (car (cdr(cdr *Pt1)))
List : Prend un nombre quelconque d'expressions et les regroupe dans une liste.