lishucheng96 发表于 2018-2-7 23:02:54

用二阶行列式法计算点表面积,带符号

;;参数:lst:点表,格式((x1 y1)(x2 y2)(x3 y3)(x4 y4)(x5 y5))
;;返回:面积值,顺时针为负,逆时针为正
;|
(defun c:tst()
(setq lst (list
                '(28.375 314.517)
                '(397.730 127.575)
                '(944.173 155.364)
                '(1058.016 319.569)
                '(622.885 544.405)
                '(139.688 438.303)
            )      
)
(princ (rtos (lst_area lst) 2 6))
)
|;
;;by:半边书生
(defun lst_area(lst / nn ss x1 y1 x2 y2)
      ;...公式:Area=1/2*(x1*y2-x2*y1+x2*y3-x3*y2+... ...+xn*x1-x1*yn)
      (setq nn 0 ss 0)
      ;将首点坐标插入到尾点以后
      (setq lst (append lst (list (car lst))))
      ;开始循环求值
      (while (< nn (- (length lst) 1))
               (setq x1 (car (nth nn lst))
                           y1 (cadr (nth nn lst))
                           x2 (car (nth (1+ nn) lst))
                           y2 (cadr (nth (1+ nn) lst))
               )
               (setq ss (+ ss (* x1 y2) (* -1 x2 y1)))
               (setq nn (1+ nn))
      )
      ;除以2得面积
      (setq ss (/ ss 2))
);end

yoyoho 发表于 2018-2-8 10:17:12

谢谢! 分享学习!!!!

czb203 发表于 2020-8-6 21:43:47

这个也很好,也谢谢你
页: [1]
查看完整版本: 用二阶行列式法计算点表面积,带符号