N° |
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.