- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AutoCAD画圆弧功能的补充
AutoCAD圆弧绘制功能的补充
秦皇岛烟草机械有限责任公司技术开发研究所 王永强 齐海涛
[摘 要] 以Visual Lisp为二次开发工具,对AutoCAD的圆弧绘制功能进行补充
[关键词] AutoCAD Visual Lisp 圆弧绘制
引言
AutoCAD是目前使用最为广泛的计算机辅助设计软件之一,圆弧绘制是其一项最基本的绘图功能。AutoCAD中画圆弧的方法是根据圆弧的基本参数(如圆弧的起点、终点、圆心、半径、角度、方向)的合理组合来进行绘制。这些绘制圆弧的方法有一个共同特点,即都可以根据已知参数通过三角计算就能得到圆弧的所有基本参数。但当已知圆弧的弧长和弦高或已知弧长和弦长时,无法用AutoCAD现有的方法绘出圆弧,因为在AutoCAD现有的所有绘制圆弧的方法中,没有弧长与弦高或弦长的参数组合。此时要在AutoCAD中绘出圆弧,必须先进行繁锁的高等数学计算,由弧长、弦高参数或弧长、弦长参数求出圆弧的半径、中心角等参数的近似值,再用AutoCAD现有的绘制圆弧的方法进行绘制,给设计工作带来不便。
这种情况在实际工程设计中是可能出现的,例如用现有规格260mm x 30m、厚1mm的矩形板料制作截面如图1所示的零件(图1中忽略板厚,弧BCD长 + 30 x 2 = 260),对尺寸L没有过于严格的要求,但要保证其它尺寸,求圆弧BCD的半径R。
图1
下面就以劣弧时已知圆弧弧长和圆弧弦高为例,介绍用AutoCAD的Visual Lisp二次开发工具进行程序设计,求解并绘出圆弧的方法。
开发过程
如图2所示,已知劣弧ADB的弧长为a,弦高CD为h。
图2
由 a=2αR
∵ α=arccos(R-h)/R
∴ a=2Rarccos(R-h)/R ①
用高等数学求解此方程,一般要先绘制方程的曲线并划定方程的根的隔离区间,再用一定的计算方法反复求得方程的近似值,直到得到满足精度要求的近似解,计算过程复杂、繁锁,而且计算精度不易保证。但我们可以用计算机强大的计算功能来精确地进行求解。在确定程序算法之前,先绘出方程①的曲线。令已知参数弦高h分别取不同的常数,以圆弧半径R为变量,求出对应每一个R值的弧长a并绘出方程曲线,为此设计以下Lisp程序:
(defun c:yz()
(setvar OSMODE 0) (setvar CMDECHO 0)
(setq r (getreal \n Please input R:);输入起始半径上限
h (getreal \n Please input h:));输入假设弦高常数
(if ( r h)(progn
(setq cosa (/ (- r h) r)
sina (sqrt (- 1 (expt cosa 2)))
jiao (atan (/ sina cosa))
l (* 2 jiao r)
)))
(while ( r 1)(progn
(setq r (- r 1))
(if ( r h)(progn
(setq cosa (/ (- r h) r) sina (sqrt (- 1 (* cosa cosa)))
jiao (atan (/ sina cosa))
l (* 2 jiao r)
p (list r l)
)
(command point p );在AutoCAD中绘制点
)))))
在AutoCAD中加载并执行以上程序,依次输入圆弧半径的上限值和圆弧弦高常数,即可绘出对应的方程曲线。图3为程序在AutoCAD中绘制的R极大值为1000、h分别取值10、50、100时方程①的曲线。
图3
由图3所示的方程曲线可知,当弦高为常数时,每一个弧长a值都对应唯一一个半径R(Rh)值,且函数为单调增函数。运用二分法算法,设计以下程序来求解方程并在AutoCAD中绘制圆弧。
(defun c:lh()
(setq l (getreal \n 输入圆弧长度L:)
h (getreal \n 输入圆弧弦高H:))
(if ( h (/ l pi ))
(progn (princ \n输入参数不构成劣弧,请执行优弧命令。))
(progn
(setq xx 0;直径范围初始极大值,可根据实际情况确定
r (/ xx 2)
c(/ (- r
文档评论(0)