- 积分
- 183
- 明经币
- 个
- 注册时间
- 2016-7-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
李学志主编的《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);绘制下一个正六边形
)
)
)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|