早教吧作业答案频道 -->其他-->
Autolisp帮解决下难题(defunc:yzluow(/)(setqb1(getpoint"指定基点:"))(setqr1(getreal"\n指定初始半径:"))(setqdisp(getreal"\n指定节距:"))(setqangtg(getreal"\n输入圆形角:"))(setqm(getreal"\n输入圈数:"))(setqn(getreal"\
题目详情
Autolisp 帮解决下难题
(defun c:yzluow(/)
(setq b1(getpoint"指定基点:"))
(setq r1(getreal"\n指定初始半径:"))
(setq disp(getreal"\n指定节距:"))
(setq angtg(getreal"\n输入圆形角:"))
(setq m(getreal"\n输入圈数:"))
(setq n(getreal"\n输入每圈细化段数:"))
(cond ((null n) (setq n 36)))
(setq delta(/(* 2 pi) n))
(setq j(/ disp n))
(setq bb(caddr b1))
(setq tg(*(/ angta 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
(repeat (* m n))
(setq k(+ k 1))
(setq ang(+ delta ang))
(setq r(- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg)))))
(setq pt2(list (* r (cos ang)) (* r (sin ang)) (+ 0 (* j k))))
(command pt2)
)
(command "")
)
运行后 提示
错误:SETQ 中变量名称错误:(SETQ PT1 (LIST (* R (COS ANG)) (* R (SIN
ANG)) (+ 0 (* J K)))) 怎么回事 能帮改改么
(defun c:yzluow(/)
(setq b1(getpoint"指定基点:"))
(setq r1(getreal"\n指定初始半径:"))
(setq disp(getreal"\n指定节距:"))
(setq angtg(getreal"\n输入圆形角:"))
(setq m(getreal"\n输入圈数:"))
(setq n(getreal"\n输入每圈细化段数:"))
(cond ((null n) (setq n 36)))
(setq delta(/(* 2 pi) n))
(setq j(/ disp n))
(setq bb(caddr b1))
(setq tg(*(/ angta 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
(repeat (* m n))
(setq k(+ k 1))
(setq ang(+ delta ang))
(setq r(- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg)))))
(setq pt2(list (* r (cos ang)) (* r (sin ang)) (+ 0 (* j k))))
(command pt2)
)
(command "")
)
运行后 提示
错误:SETQ 中变量名称错误:(SETQ PT1 (LIST (* R (COS ANG)) (* R (SIN
ANG)) (+ 0 (* J K)))) 怎么回事 能帮改改么
▼优质解答
答案和解析
程序中变量名前后不一致,有多")"和少")"现象,应如下:
(defun c:yzluow(/)
(setq r1(getreal"\n指定初始半径:"))
(setq disp(getreal"\n指定节距:"))
(setq angtg(getreal"\n输入圆形角:"))
;(setq m(getreal"\n输入圈数:"))
;(setq n(getreal"\n输入每圈细化段数:"))
;因为repeat后面要求跟整数,所以这两行应改为如下:
(setq m(getint "\n输入圈数:"))
(setq n(getint "\n输入每圈细化段数:"))
(cond ((null n) (setq n 36)))
(setq delta(/(* 2 pi) n))
(setq j(/ disp n))
(setq bb(caddr b1))
;(setq tg(*(/ angta 180) pi));变量错,应为
(setq tg(*(/ angtg 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
;(repeat (* m n));最后面多一个")"
(repeat (* m n)
(setq k (+ k 1))
(setq ang (+ delta ang))
;(setq r(- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg)))));最后面少一个")"
(setq r (- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg))))))
(setq pt2 (list (* r (cos ang)) (* r (sin ang)) (+ 0.0 (* j k))))
(command pt2)
)
(command "")
(princ)
)
(defun c:yzluow(/)
(setq r1(getreal"\n指定初始半径:"))
(setq disp(getreal"\n指定节距:"))
(setq angtg(getreal"\n输入圆形角:"))
;(setq m(getreal"\n输入圈数:"))
;(setq n(getreal"\n输入每圈细化段数:"))
;因为repeat后面要求跟整数,所以这两行应改为如下:
(setq m(getint "\n输入圈数:"))
(setq n(getint "\n输入每圈细化段数:"))
(cond ((null n) (setq n 36)))
(setq delta(/(* 2 pi) n))
(setq j(/ disp n))
(setq bb(caddr b1))
;(setq tg(*(/ angta 180) pi));变量错,应为
(setq tg(*(/ angtg 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
;(repeat (* m n));最后面多一个")"
(repeat (* m n)
(setq k (+ k 1))
(setq ang (+ delta ang))
;(setq r(- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg)))));最后面少一个")"
(setq r (- r1 (* (+ 0 (* j k) (/ ( sin tg) (cos tg))))))
(setq pt2 (list (* r (cos ang)) (* r (sin ang)) (+ 0.0 (* j k))))
(command pt2)
)
(command "")
(princ)
)
看了 Autolisp帮解决下难题...的网友还看了以下:
点A、B分别是椭圆长轴的左、右端点,点F是椭圆的右焦点.点P在椭圆上,且位于x轴的上方,PA⊥PF 2020-04-12 …
★高二数学★椭圆c的中心在原点,左焦点F1,右焦点F2均在x轴上椭圆c的中心在原点,左焦点F1,右 2020-05-16 …
设C是圆心为O,半径为r的圆,对任意不在圆上的点P作射线OP设C是圆心为O,半径为r的圆,对任意不 2020-06-03 …
已知三点A3.2,B5.-3,C-1.3,以及P2.-1为圆心作为一个圆使ABC三点中一点在圆外, 2020-07-09 …
急如图所示,已知矩形ABCD的边AB=3cmBC=4cm(1)以点A为圆心4cm为半径坐圆A则点B 2020-07-20 …
点与圆的位置关系有三种:点在圆上、点在圆内、点在圆外.设圆的半径为r,点到圆心的距离为d.若点在圆 2020-07-26 …
初三数学圆O1圆O2的半径分别是R.r,圆心距是d,两圆外离.点P在圆O1上运动,点Q在圆O2上运 2020-07-30 …
圆O1与圆O2相交于A、B两点,过点A作圆O1的切线交圆O2于点C,过点B作两圆割线,分别交圆O1 2020-07-31 …
如图,已知圆O1与圆O2外切于点A,AB是圆O1的直径,BD切圆O2于点D,交圆O1于点C.求证: 2020-07-31 …
一道数学题(1)P是圆O外的一点,直线PO分别交圆O于点A、B,则PA是点P到圆O上的点的最短距离 2020-08-01 …