关于AutoLISP里的角度单位
李学志主编的《Visual LISP程序设计》(第一版或第二版)第7.3节【例7-1】,是自定义一个以递归方式绘制旋转正六边形的命令。程序源代码附在下面。我的问题是, AutoLISP里面的角度单位一般都是弧度,sin函数、cos函数也使用的是弧度,可为什么我运行改程序所定义的r-hexagon命令时,必须输入以度为单位的角度,才能得到我想要的图像呢?求高手们不吝赐教。比如,我要输入"r-hexagon, 1000, 500, 30"才能得到附图中的正六边形图案,也就是每个正六边形在上一个基础上旋转30度。但是30度如果划算成弧度的话应该是0.523599啊。附:源代码
文件file1.lsp的源代码:
(defun c:r-hexagon(/ pc lmax lmin alf)
(setvar "cmdecho" 0);关闭普通命令提示信息
(setvar "blipmode" 0);关闭光标痕迹
(setvar "osmode" 0);关闭对象捕捉状态
(setq pc(getpoint "\n输入正六边形的旋转中心:"))
(setq lmax(getdist pc "\n输入正六边形的最大边长:"))
(setq lmin(getdist pc "\n输入正六边形的最小边长:"))
(setq alf(getangle pc "\输入正六边形的旋转角:"))
(hexagon pc lmax lmin 0.0);调用递归方式绘制旋转正六边形的函数
(princ);静默退出
)
文件file2.lsp的源代码:
(defun hexagon (pc l lmin phi);变元phi是正六边形的初始角度
(command "pline" (polar pc phi l)
(polar pc (+ phi (/ pi 3.0)) l)
(polar pc (+ phi (/ pi 1.5)) l)
(polar pc (+ phi pi) l)
(polar pc (+ phi (/ pi 0.75)) l)
(polar pc (+ phi (/ pi 0.6)) l)
"c"
)
(if (>= l lmin)
(progn
(setq l (/ l (+ (cos alf) (* (sin alf) 0.5773503))));下一个正六边形的边长
(setq phi (+ phi alf));下一个正六边形的旋转角度
(hexagon pc l lmin phi);绘制下一个正六边形
)
)
)
哦,我自己弄明白了,是因为在这一句中(setq alf(getangle pc "\输入正六边形的旋转角:")),getangle的返回值是弧度。而输入的角度应该使用AutoCAD当前的角度单位,一般默认是度。
页:
[1]