作业帮 > 综合 > 作业

autolisp,想画出两个同心矩形,两个矩形的边距离为20,但不知道为什么变成两个一模一样的矩形,求问?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 02:44:38
autolisp,想画出两个同心矩形,两个矩形的边距离为20,但不知道为什么变成两个一模一样的矩形,求问?
(defun c:ban()
;求第一个矩形的点
(setq p1 (getpoint "输入基准点:"))
(setq chang (getreal "\n长:"))
(setq gao (getreal "\n高:"))
(setq p2 (polar p1 0 chang))
(setq p3 (polar p1 (/ pi 2) gao))
(setq p4 (polar p3 0 chang))
;以下依据 p1、p2、p3、p4 点画矩形
(command "rectang" p1 p4)
;以下mp1、mp2、mp3、mp4确定另一矩形的4个点
(setq mp1 (list (- (car p1) 20) (+(cadr p1) 20)))
(setq mp2 (list (- (car p2) 20) (+(cadr p2) 20)))
(setq mp3 (list (+ (car p3) 20) (-(cadr p3) 20)))
(setq mp4 (list (- (car p4) 20) (-(cadr p4) 20)))
(command "rectang" mp1 mp4)

例如:运行程序后输入1000 和800,那应该出来1000X800和960X760的两个矩形。但结果是两个1000X800的矩形。而且当我不画第一个矩形的时候,960X760的矩形就出来了。
下面是我改过的代码,你试一下,应该还有些地方可以再完完善的,比如加上检测矩形大小的语句等.
(defun c:ban ()
;求第一个矩形的点
(setq p1 (getpoint "输入基准点:"))
(setq chang (getreal "\n长:"))
(setq gao (getreal "\n高:"))
(setq p2 (polar p1 0 chang))
(setq p3 (polar p1 (/ pi 2) gao))
(setq p4 (polar p3 0 chang))
;以下依据 p1、p2、p3、p4 点画矩形
(command "rectang" p1 p4)
;以下mp1、mp2、mp3、mp4确定另一矩形的4个点
(setq mp1 (list (+ (car p1) 20) (+ (cadr p1) 20)))
(setq mp2 (list (- (car p2) 20) (+ (cadr p2) 20)))
(setq mp3 (list (+ (car p3) 20) (- (cadr p3) 20)))
(setq mp4 (list (- (car p4) 20) (- (cadr p4) 20)))
(command "rectang" mp1 mp4)
)