请教一下各位大神,我用这个程序画图,为什么出的图总是不精确
lisp吧
全部回复
仅看楼主
level 2
夺舍法 楼主
2014年07月17日 01点07分 1
level 2
夺舍法 楼主
(defun c:dwcg ( / )
(prompt "\n 欢迎使用淄博帝王台面操作系统")
(setq a1 (getpoint"随意点个点"))
(setq l (getreal"台面长度"))
(setq s (getreal"台面宽度"))
(setq d (getreal"刀型代码d-"))
(cond ((= d 2)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 14)(setq f 7))
((= d 3)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 15)(setq f 7))
((= d 4)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 15)(setq f 9))
((= d 5)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 13)(setq f 7))
((= d 6)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 15)(setq f 7))
((= d 14)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 15)(setq f 7))
((= d 15)(setq a 8)(setq b 30)(setq c 50)(setq d 50)(setq e 15)(setq f 7)))
(setq a3 (polar a1 (* pi 1.5) a))
(setq a5 (polar a1 (* pi 1.5) (+ a b)))
(setq a7 (polar a1 (* pi 1.5) (+ a b c)))
(setq a9 (polar a1 (* pi 1.5) (+ a b c s)))
(setq a11 (polar a1 (* pi 1.5) (+ a b c s d)))
(setq a13 (polar a1 (* pi 1.5) (+ a b c d e s)))
(setq a15 (polar a1 (* pi 1.5) (+ a b c d e f s)))
(setq a16 (polar a15 0 l))
(setq a14 (polar a16 (* pi 0.5) f))
(setq a12 (polar a16 (* pi 0.5) (+ e f)))
(setq a10 (polar a16 (* pi 0.5) (+ d e f)))
(setq a8 (polar a16 (* pi 0.5) (+ d e f s)))
(setq a6 (polar a16 (* pi 0.5) (+ c d e f s)))
(setq a4 (polar a16 (* pi 0.5) (+ b c d e f s)))
(setq a2 (polar a1 0 l ))
(setq a20 (polar a16 0 (+ d 10 )))
(setq a30 (polar a20 (* pi 0.5) (+ d e f 15)))
(setq a29 (polar a30 pi 10))
(setq a28 (polar a29 (* pi 1.5) 15))
(setq a24 (polar a30 pi (- (+ c s) 13)))
(setq a23 (polar a24 pi (+ d 10)))
(setq a18 (polar a24 (* pi 0.5) (- (+ a b) 2)))
(setq a19 (polar a15 pi (+ d 10)))
(setq a25 (polar a19 (* pi 0.5) (+ d e f 15)))
(setq a26 (polar a25 0 10))
(setq a27 (polar a26 (* pi 1.5) 15 ))
(setq a21 (polar a25 (* pi 0.5) (- (+ b s 2) 15)))
(setq a22 (polar a1 (* pi 1.5) (- (+ a c) 2)))
(setq a17 (polar a21 (* pi 0.5) (- (+ a c) 2)))
(setq a20 (polar a16 0 (+ d 10)))
(setq a31 (polar a1 (* pi 0.5) (+ a b c d e f)))
(setq w (getreal"毛边0左下反1右下反2"))
(cond ((= w 1) ((command"line" a1 a17 "" \e)(command"line" a1 a22 "" \e)(command"line" a22 a21 "" \e)(command"line" a21 a17 "" \e)(command"line" a21 a25 "" \e)(command"line" a22 a7 "" \e)(command"line" a25 a26 "" \e)(command"line" a26 a27 "" \e)(command"line" a27 a9 "" \e)(command"line" a9 a15 "" \e)(command"line" a19 a15 "" \e)(command"line" a15 a16 "" \e)(command"line" a19 a15 "" \e)(command"line" a16 a2 "" \e)(command"line" a2 a1 "" \e)))
((= w 0) ((command"line"a1 a2"" \e)
(command"line"a2 a16"" \e)
(command"line"a16 a15"" \e)
(command"line"a1 a15"" \e)
))))
2014年07月17日 01点07分 2
level 2
夺舍法 楼主
(cond ((= w 1) ((command"line" a1 a17 "" \e)(command"line" a1 a22 "" \e)(command"line" a22 a21 "" \e)(command"line" a21 a17 "" \e)(command"line" a21 a25 "" \e)(command"line" a22 a7 "" \e)(command"line" a25 a26 "" \e)(command"line" a26 a27 "" \e)(command"line" a27 a9 "" \e)(command"line" a9 a15 "" \e)(command"line" a19 a15 "" \e)(command"line" a15 a16 "" \e)(command"line" a19 a15 "" \e)(command"line" a16 a2 "" \e)(command"line" a2 a1 "" \e)))
就是这一段,为什么总是出的图有误差
2014年07月17日 01点07分 3
level 2
夺舍法 楼主
跪求大神们指教,我是你的粉丝
2014年07月17日 01点07分 4
level 7
没太明白“出的图有误差”是什么意思,如果出图有误差,肯定是计算问题,这个要调试,逐个变量查看,肯定能找到那个位置。
调试方法:
1.保存文件为dwcg.
lsp
.
2.在Visual Lisp控制台里加载该文件,(load "dwcg.lsp")
3.运行,(c:dwcg)。
4.此时正在运行的代码将逐条标示,你可以设置一些断点和变量的监测,观察程序运行情况。
5.程序中出现的任何错误都会打印在Visual Lisp控制台上。
以下是我输入的参数和图形,第一个点时任意指定的,其余参数分别是:60 50 3 1
结果图形为:
我还发现几个问题:
1.箭头标示位置处要加一个progn,否则一定报“no function xxx”这类错误。
2.没有异常处理,比如说变量d,如果d不是2、3、4、5、6、14、15这些值中的任何一个,程序必崩溃。
2014年07月17日 03点07分 5
以加粉,大神,我所说的有误差,如图所示,这个图形是要闭合的,但是有时闭合,有时就像图中一样不是闭合的,是不是cad出了毛病啊,还是说我的程序有错误
2014年07月17日 05点07分
谢谢你
2014年07月17日 05点07分
回复 狙击手考拉 :不敢当,common lisp爱好者而已
2014年07月17日 15点07分
回复 夺舍法 :个人经验,如果同一组参数每次都出现出图有误差的现象,应该是某个(command "line" ....)命令的数据计算有误。如果代码有错,一般程序会异常或警告;但若是数据计算错误,只能逐个数据点检查,没什么捷径,调试吧。
2014年07月17日 15点07分
level 4
cad 的捕捉设置 影响了程序计算点的值。
所以 lisp程序中最好不要用 command 调用外部命令创实体。
2015年03月14日 17点03分 6
level 2
6楼正解,最好不要轻易用command,用entmake代替
2015年03月18日 00点03分 7
level 3
系统变量得关闭,与开启第一项就写。你没有写
2015年03月24日 16点03分 8
level 1
题目:用Auto LISP语言编写可在任意位置绘制任意指定大小的图形。设三角形左下角为x0,y0,三角形边长为a,可计算三顶点和圆心位置、半径。(拜托了,谢谢)
2015年05月09日 13点05分 9
1