(defun average-of-points (points)
"Calculate an average of 2d or 3d points, given as a list of lists.
If a 2d point is given, it is converted to 3d with z=0."
- (cond ((numberp (first points))
- points)
- (t (let ((numpoints (length points)))
- (mapcar #'/
- (list (apply #'+ (mapcar #'first points))
- (apply #'+ (mapcar #'second points))
- (apply #'+
- (mapcar #'(lambda (x)
- (if (null (third x))
- 0
- (third x)))
- points)))
- (list numpoints
- numpoints
- numpoints))))))
+ (if (numberp (first points))
+ points
+ (let ((numpoints (length points)))
+ (mapcar #'/
+ (list (apply #'+ (mapcar #'first points))
+ (apply #'+ (mapcar #'second points))
+ (apply #'+
+ (mapcar #'(lambda (x) (if (null (third x)) 0 (third x)))
+ points)))
+ (list numpoints numpoints numpoints)))))
(defun dot-product-points (apoint bpoint)
"Return the dot-product of 3d vectors a and b.