本帖最后由 Gu_xl 于 2013-3-21 09:05 编辑
 - ;; 返回由表 L1 构成的多边形面积. 点逆时针为正,顺时针为负
- (defun getplarea (l1 / s x1 y1 x2 y2 p1)
- (setq s 0.
- p1 (last l1)
- x1 (car p1)
- y1 (cadr p1)
- )
- (foreach p1 l1
- (setq x2 (car p1)
- y2 (cadr p1)
- s (- (+ s (* x1 y2)) (* x2 y1))
- x1 x2
- y1 y2
- )
- )
- (* 0.5 s )
- )
- ;;简洁写法
- (defun getplarea (l)
- (* 0.5
- (apply '+
- (mapcar '(lambda (a b)
- (- (* (car a) (cadr b)) (* (car b) (cadr a)))
- )
- l
- (append (cdr l) (list (car l)))
- )
- )
- )
- )
|