曲阜师范大学经济学院:如何在AutoCAD中画正弦曲线

来源:百度文库 编辑:高校问答 时间:2024/04/29 03:46:48

在CAD中绘制正玄曲线的步骤:举例说明。

  1. 绘制三条横的直线。线长200,互相间隔20.

  2. 绘制十条竖着的直线,线长100,互相间隔20.

  3. 执行spl样条曲线命令,分别连接横线和竖线的交点,就得到了正弦曲线。

  4. 删除辅助的横线和竖线即可。如图所示:

打开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 表格 从 #<editor "E:/AutoCAD 2004/Sample/VisualLISP/drawsine.LSP"> 加载”的文字,并且焦点自动切换到 Visual LISP 控制台。输入(C:drawsin)回车或者在CAD输入drawsin命令即可运行这个函数。如果函数定义中没有“C:”则只能在Visual LISP 控制台调用。函数运行后,用鼠标在CAD的活动窗口指定坐标原点,然后在控制台输入要画的正弦曲线的周期数,即可画出这条曲线。
我把某教程中有bug的一段程序改好后就是这个了,中文的注释和操作步骤都是我自己写的。感觉这段程序比较典型、有用,因为把 sin(x) 换成其他函数就可以画出它们的图像了。

最好是objectarx编程
好像在晓东论坛上有编好的lisp,你可以找找看?

(defun c:sinx();;绘制y=sinx曲线
(setq x (* pi -2))
(setq zL (* pi 2));;周期
(setq n1 (getint "等分数<默认:100>: "))
(if (null n1)(setq n1 100))
(setq x1 (/ zL n1));;增量
(setvar "osmode" 0 )
(command "pline")
(while (<= x (* pi 2))
(command (list x (sin x)))
(setq x (+ x x1))
)
(command "");;结束多段线
)
(defun c:cosx();;绘制y=cosx曲线
(setq x (* pi -2))
(setq zL (* pi 2));;周期
(setq n1 (getint "等分数<默认:100>: "))
(if (null n1)(setq n1 100))
(setq x1 (/ zL n1));;增量
(setvar "osmode" 0 )
(command "pline")
(while (<= x (* pi 2))
(command (list x (cos x)))
(setq x (+ x x1))
)
(command "");;结束多段线
)

只能先画点,再用样条线拟合。