找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 922|回复: 5

[原创]:一个带对话框的可以根据通过输入表达式绘制曲线的lisp程序

[复制链接]
发表于 2004-8-8 10:04:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
可以绘制y=Ax^2+Bx+C形式的抛物线,其实也可以绘制其他公式的图形,只要修改calc子程序中的公式就可以了。程序在AutoCAD R14下通过。

程序如下:

;;;绘制抛物线y=Ax^2+Bx+C
;;;本程序的A,B,C值在子程序开始时定义,如需要也可设计成通过键盘交互式输入
;;输入x起始值及结束值时,如为整数应在其后加上“.0”,如“20”应输成“20.0”
(defun c:pwx(/ osn x y step s1 s2 sm bpt zbl zbpt1 zbpt2 x0 y0 x1 y1)
  (setq step (getreal  "\n 请输入步长值:" )) ;画出的曲线是由一段段直线组成的,步长值越小曲线越光滑
  (setq osn (getvar "osmode"))
  (setvar "osmode" 0) ;去掉捕捉功能
  (setq s1 (getreal  "\n 请输入x起始值:" )) ;s1,s2就是抛物线所在的区间
  (setq s2 (getreal  "\n 请输入x结束值:" ))
  (setq bpt (getpoint  "\n 请点取坐标系原点:" )) ;在作图区中点取一点作为坐标系原点,下面的计算均假定原点坐标为(0,0,0)
  (setq x0 (car bpt))
  (setq y0 (cadr bpt)) ;x0,y0是坐标系原点x,y坐标
  (setq zbl (/ (abs (- s2 s1)) 2)) ;zbl是s1,s2间的距离的一半,画坐标轴用
  (setq zbpt1 (polar bpt pi zbl))
  (setq zbpt2 (polar bpt 0 zbl)) ;zbpt1,zbpt2是x坐标轴起点及终点
  (command "Line" zbpt1 zbpt2 "") ;绘出x坐标轴
  (setq zbpt1 (polar bpt (/ pi 2) zbl))
  (setq zbpt2 (polar bpt (* 3 (/ pi 2)) zbl)) ;zbpt1,zbpt2是y坐标轴起点及终点
  (command "Line" zbpt1 zbpt2 "") ;绘出y坐标轴
  (setq x s1)
  (calc) ;调用公式计算子程序求抛物线第一点
  (setq zbpt1 (list x1 y1 '0)) ;第一点
  (while (< (+ x step) s2)
    (setq x (+ x step)) ;x增加步长值
    (calc) ;调用公式计算子程序求下一点
    (setq zbpt2 (list x1 y1 '0)) ;第二点
    (command "Line" zbpt1 zbpt2 "") ;绘出一段直线
    (setq zbpt1 zbpt2) ;绘出直线的终点成为下一直线的起点
  )
  (setq x s2)
  (calc) ;调用公式计算子程序求抛物线最后一点
  (setq zbpt2 (list x1 y1 '0)) ;最后一点
  (command "Line" zbpt1 zbpt2 "") ;绘出最后一段直线
  (setvar "osmode" osn) ;恢复捕捉功能
  (princ)
);;主程序结束
;;;公式计算子程序
(defun calc(/ A B C)
  ;;下面定义A,B,C的值
  (setq A 0.01)
  (setq B 1.0)
  (setq C -50.0)
  ;;注意:为保持按实数运算,A,B,C值中小数点及其后的“0”不可省略
  (setq y (+ (+ (* A x x) (* B x)) C)) ;这里是抛物线计算公式,其他公式修改本行即可
  (setq x1 (+ x x0))
  (setq y1 (+ y y0)) ;x1,y1是根据公式计算出的相应所点取坐标系原点的坐标值
)
(prompt "\n 抛物线绘制程序已加载,键入 PWX 启动本程序")
;;;程序结束

下图是用该程序绘制的y=0.01x^2+x-50的图形,选择区间[-120,50],步长值设为1。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-11 08:15:38 | 显示全部楼层
要是公式能交互输入就好了,省得每次改程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-11 16:58:45 | 显示全部楼层
我记得有的程序可以实现交互输入的呀,还有对话框呢,不知道人家是怎么实现的....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-14 13:58:20 | 显示全部楼层
交互输入其实也很容易的,需要加入dcl才行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-20 13:05:38 | 显示全部楼层
呵呵,我编了一个,大家试用一下,多提提意见。
改版了,大家到下面的联结下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-21 09:09:58 | 显示全部楼层
修改了一下,界面更简洁。
http://www.xdcad.net/forum/showt ... 1625758#post1625758
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 21:14 , Processed in 0.191224 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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