明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 574|回复: 1

[已解答] 关于AutoLISP里的角度单位

[复制链接]
发表于 2016-7-28 19:45 | 显示全部楼层 |阅读模式
李学志主编的《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
 楼主| 发表于 2016-7-28 20:08 | 显示全部楼层
哦,我自己弄明白了,是因为在这一句中(setq alf(getangle pc "\输入正六边形的旋转角:")),getangle的返回值是弧度。而输入的角度应该使用AutoCAD当前的角度单位,一般默认是度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 17:46 , Processed in 0.375343 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表