SUb sin2()
'由正弦曲线的起点、幅度、周期、周波数、方向来画正弦曲线
dim sinobj as aCADlwpolyline
dim points() as double
dim a, n, k as integer
dim h, f as double
dim pa, pb as variant
pi = 3.1415926535
pa = thisdraWing.utility.getpoint(, "请输入正弦曲线起点:")
h = thisdraWing.utility.getdistance(pa, "请正弦曲线幅度:")
f = thisdraWing.utility.getdistance(pa, "请正弦曲线周期:")
n = thisdraWing.utility.getreal("请输入正弦曲线周波数:")
k = thisdraWing.utility.getreal("请输入正弦曲线每周波线段数(建议不小于36):")
pb = thisdraWing.utility.getpoint(pa, "请输入点以确定正弦曲线的方向:")
redim points(0 to 2 * k * n + 1) as double
b = thisdraWing.utility.anglefromxaxis(pa, pb)
For a = 0 to 2 * k * n step 2
points(a) = pa(0) + f * (a / 2) / k
points(a + 1) = pa(1) + h * sin(2 * pi * a / k / 2)
next
set sinobj = thisdraWing.modelspace.addlightweightpolyline(points)
sinobj.rotate pa, b
zoomextents
end SUb
打开CAD,依次点击菜单“工具→Autolisp→viSUal lisp编辑器”,新建文件,输入以下代码:
(defun c:drawsin (/ leftpoint leftpointx leftpointy n x step) (initget 1) ;1化为8位二进制是00000001,位0置1表示禁止用户仅按 enter 键来响应输入请求
(setq leftpoint (getpoint "\nleft point:") leftpointx (car leftpoint) leftpointy (CADr leftpoint)) (initget 7) ;7化为8位二进制是00000111,位1置1表示禁止用户输入零值来响应输入请求,位2置1表示禁止用户输入负值来响应输入请求
(setq n (getint "\nnumber of cyles:")) (setq x 0 step 0.1) (command "pline" ) (while (< x (* 2 n pi))
(command (list (+ leftpointx x) (+ leftpointy (sin x))));以leftpoint为原点,逐点画出正弦曲线 (setq x (+ x step)) ;x=x+step,横坐标增加步长值 )
(command (list (+ leftpointx x) (+ leftpointy (sin x))) (list (+ leftpointx (* 2 n pi)) leftpointy) "")
(command "line" leftpoint (list (+ leftpointx (* 2 n pi)) leftpointy) "") ;画x轴 (command "line" (list leftpointx (+ leftpointy 2)) (list leftpointx (- leftpointy 2)) "") ;画y轴)
保存为 drawsine.lsp 文件,按 ctrl+alt+e,viSUal lisp 控制台将显示类似于:“; 1 表格 从 #AutoCAD 2004/sample/viSUallisp/drawsine.lsp"> 加载”的文字,并且焦点自动切换到 viSUal lisp 控制台。输入(c:drawsin)回车或者在CAD输入drawsin命令即可运行这个函数。如果函数定义中没有“c:”则只能在viSUal lisp 控制台调用。函数运行后,用鼠标在CAD的活动窗口指定坐标原点,然后在控制台输入要画的正弦曲线的周期数,即可画出这条曲线。
我把某教程中有bUG的一段程序改好后就是这个了,中文的注释和操作步骤都是我自己写的。感觉这段程序比较典型、有用,因为把 sin(x) 换成其他函数就可以画出它们的图像了。