.. . . try this and let me know if it works well . . .
(defun :VECTOR_2P (pt1 pt2 / )
(if(equal pt1 pt2 1e-10)
nil
(mapcar (function(lambda (i j) (- j i))) pt1 pt2)
)
)
(defun :ACOS (x)
;
(cond
((equal x -1.0 1e-06) (setq x -1.0) )
((equal x 1.0 1e-06) (setq x 1.0) )
((> x 1.0) (setq x nil ) )
((< x -1.0) (setq x nil ) )
)
(if x
(atan (sqrt (- 1.0 (expt x 2.0))) x)
nil
)
)
(defun :VECTOR_SCALAR_PRODUCT (v1 v2)
(+ (* (car v1)(car v2)) (* (cadr v1)(cadr v2)) (* (caddr v1)(caddr v2)) )
)
(defun :VECTOR_MODULE (v / X Y Z)
(setq x (car v) y (cadr v) z (caddr v) )
(if (not z) (setq z 0.0))
(sqrt (+ (* z z) (* x x) (* y y) ) )
)
; returns intenal angle (radiants) for 3 3d points
(defun :ANG2D_3P3D_I (p1 px p3 / V1 V3)
(setq v1

VECTOR_2P px p1))
(if v1
(setq v3

VECTOR_2P px p3))
)
(if v3
(if (not (equal v1 v3 1e-12))

ACOS
(/

VECTOR_SCALAR_PRODUCT v1 v3)
(*

VECTOR_MODULE v1)

VECTOR_MODULE v3) )
)
)
0.0
)
nil
)
)
domenico