丽丽星空 发表于 2013-9-26 12:54:47

新人第一贴,求完善(测量多点距离和)

本帖最后由 丽丽星空 于 2013-9-26 13:08 编辑

刚开始学习LISP的时候就简单的编写了一个程序,花了三天时间。程序虽简单但对新手来说可是困难啊!代码如下:
;测量多点程序,当x1=x2时,停止测量,返回距离和
(defun c:dm ()
(setq m 0)
(setq x1 (getpoint))
(setq x2 (getpoint))
(setq y1 (distance x1 x2))
(setq m (+ m y1))
(while(or (/=(setq p11 (car x1)) (setq p21 (car x2))) (/=(setq p12 (cadr x1)) (setq p22 (cadr x2))) (/=(setq p13 (caddr x1)) (setq p23 (caddr x2))))
(setq x1 x2)
(setq x2 (getpoint))
(setq y1 (distance x1 x2))
(setq m (+ m y1))
)
(prompt "\n距离之和:")
(prin1 m)
)

程序有不完善的地方,如 当x1=x2时,停止测量,返回距离和。本想按空格键或ENTER键退出程序,研究了很久也没出来。请知者指教。

自贡黄明儒 发表于 2013-9-26 13:02:43

(defun c:dm1 (/ M X1 X2)
(setq m 0)
(while (and (setq x1 (getpoint "\n 起点"))
              (setq x2 (getpoint x1 "\n 终点"))
       )
    (setq m (+ m (distance x1 x2)))
)
(princ (strcat "\n距离之和:" (VL-PRINC-TO-STRING m)))
(princ)
)

丽丽星空 发表于 2013-9-26 22:46:39

自贡黄明儒 发表于 2013-9-26 13:02 static/image/common/back.gif
(defun c:dm1 (/ M X1 X2)
(setq m 0)
(while (and (setq x1 (getpoint "\n 起点"))


多谢大侠指点,你编的程序真是精致啊

snddd2000 发表于 2013-9-26 23:37:31

(defun c:dm2 (/ M X1 ptlst)
(while (setq x1 (getpoint "\n 点"))
    (setq ptlst (cons x1 ptlst))
)
(setq        m
       (apply        '+
                (mapcar        '(lambda (x y)
                           (distance x y)
                       )
                        ptlst
                        (cdr ptlst)
                )
       )
)
(princ (strcat "\n距离之和:" (VL-PRINC-TO-STRING m)))
(princ)
)

丽丽星空 发表于 2013-9-27 22:58:18

snddd2000 发表于 2013-9-26 23:37 static/image/common/back.gif
(defun c:dm2 (/ M X1 ptlst)
(while (setq x1 (getpoint "\n 点"))
    (setq ptlst (cons x1 ptlst)) ...

精炼!正是所需功能。为避免Z值影响,可再优化
页: [1]
查看完整版本: 新人第一贴,求完善(测量多点距离和)