乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 20|回复: 1

[LISP]请帮我的程序指出错误

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2004-6-10 10:39:00 | 显示全部楼层 |阅读模式
我的程序是在选择的边界内部间隔10米画一个圆。我的大致思想是在选择边界后,在选择一内部点。然后用一个二重循环得到点。在点 画圆。点的得到是在内部点的基础上分x和y累加累减,用一个测试在内部的函数(zn)来控制循环的结束。但是我的程序不能运用,不知道问题出在那里。请大家帮帮忙,在此谢谢了!!!
(defun c:tc()
(defun zn (/                plendpt                         x_lst                 e                 op
                                         n                fst_pt                         int_num                         online         pc
                                         pn                min_num                         edge_int_num                 pt_online_num
                                         op1 )
         (setq min_num 0.0001)
         (princ "\n选择边界:")
         (while (not e) (setq e (car (entsel))))
         (if (= "LWPOLYLINE" (cdr (assoc 0 (entget e))))
                         (progn
                                         (redraw e 3)
                                         (while (not op) (setq op (getpoint "\n请拾取边界内部点:")))
                                         (foreach n (entget e)
        (if (= 10 (car n))
                 (if plendpt
                                 (setq plendpt (append plendpt (list (cdr n))))
                                 (setq plendpt (list (cdr n)))
                 )
        )
                                         )
                                         (setq X_lst (mapcar '(lambda (x) (car x)) plendpt))
                                         (setq delta_X (abs (- (apply 'max x_lst) (car op))))
                                         (setq plendpt                 (append plendpt (list (nth 0 plendpt)))
                                 edge_int_num         0
                                 pt_online_num 0
                                         )
                                         (while (> (length plendpt) 1)
        (setq pc (nth 0 plendpt)
                                                 pn (nth 1 plendpt)
        )
        (setq op1 (polar op 0 (* delta_x 2)))
        (if (inters op
                                         op1
                                         pc
                                         pn
                                 )
                 (setq edge_int_num (+ 1 edge_int_num))
        )
        (if (equal (+ (distance op pc) (distance pc op1))
                                 (distance op op1)
                                                                                         min_num)
                 (setq pt_online_num (+ 1 pt_online_num))
        )
        (if (equal (+ (distance op pc) (distance op pn))
                                 (distance pc pn)
                                 min_num
                                 )
                 (setq online "t")
        )
        (setq plendpt (cdr plendpt))
                                         )
                                         (redraw e 4)
                                 
                                         )
                         )
         )
         (setq x (car p0))
         (setq y (cadr p0))
         (zn)
                         (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (zn)
                                                                 (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (command "circle" p0 1 "" )
                                                                 (setq x (+ x 10))         
                                                                 (setq p0 (list x y))
                                                                                                                                         )
                 (setq y (+ y 10))         
                 (setq p0 (list x y))
         (command "circle" p0 1 "" )
                                         )
                 (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (zn)
                                                                 (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (command "circle" p0 1 "" )
                                                                 (setq x (+ x 10))         
                                                                 (setq p0 (list x y))
                                                                                                                                         )
                 (setq y (- y 10))         
                 (setq p0 (list x y))
         (command "circle" p0 1 "" )
                                                         )
         (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (zn)
                                                                 (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (command "circle" p0 1 "" )
                                                                 (setq x (- x 10))         
                                                                 (setq p0 (list x y))
                                                                                                                                         )
                 (setq y (+ y 10))         
                 (setq p0 (list x y))
                 (command "circle" p0 1 "" )
                 )
         (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (zn)
                                                                 (while (= (rem (+ pt_online_num edge_int_num) 2) 1)
                                                                 (command "circle" p0 1 "" )
                                                                 (setq x (- x 10))         
                                                                 (setq p0 (list x y))
                                                                                                                                         )
                 (setq y (- y 10))         
                 (setq p0 (list x y))
                 (command "circle" p0 1 "" )
                 )
)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-6-10 10:50:00 | 显示全部楼层
注意:        edge_int_num                                         pt_online_num这两个变量是zn函数的局部变量,离开这个函数后,这个变量就不存在了,所以你主函数的同样名字的两个变量跟ZN函数里这两个变量是没有关系的,这样就导致主函数中的变量没有赋值。。。
另:(setq X_lst (mapcar 'car plendpt));这里这样就可以了
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-18 11:19 , Processed in 1.736129 second(s), 57 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表