找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 842|回复: 6

[求助] [求助]:编了一个小程序,老是有问题,现在放上来请各位指教

[复制链接]
发表于 2004-9-12 09:47:05 | 显示全部楼层 |阅读模式

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

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

×
一个画二段光滑连接曲线的程序,具体见附图

  1. (defun c:qx ()
  2. (setq b1 (getint "\n左端高 " ))
  3.   (setq b2 (getint "\n 中端高" ))
  4.   (setq alfal (getreal "\n左系数 " ))
  5.   (setq alfac (getreal "\n中系数 " ))
  6. (if (>= alfal alfac)
  7.   (setq alfal (getreal "\n错误,请重新输入左系数" ))
  8.   (setq alfac (getreal "\n请重新输入中系数" ))
  9.   (setq beamspan (getint "\n 长度" ))
  10.   (setq beamh (getint "\n高度范围" ))
  11.   (setq pt000 (getpoint "\n 坐标中心点" ))
  12.    (setq x0  (car pt000))
  13.    (setq y0  (cadr pt000))
  14.    (setq l1 (* alfal beamspan))
  15.    (setq l3 (* alfac beamspan))
  16.    (setq zbl l3)
  17. (setq zbpt1 (polar pt000 pi zbl))
  18. (setq zbpt2 (polar pt000 0 zbl))
  19. (command "Line" zbpt1 zbpt2 "")
  20. (setq zbpt1 (polar pt000 (/ pi 2) zbl))
  21. (setq zbpt2 (polar pt000 (* 3 (/ pi 2)) zbl))
  22. (command "Line" zbpt1 zbpt2 "")                  
  23.          (setq x (- 0 l3))
  24.                 (calc1)
  25.                (setq zbpt1 (list x1 y1 '0))
  26.         (command "pline")       
  27.                (setq x (+ x 1))
  28.                 (calc1)
  29. (setq zbpt2 (list x1 y1 '0))
  30.         (command zbpt2)
  31.         (setq zbpt1 zbpt2)
  32.         (command "")
  33.      (setq x (- l3 l1))
  34. (calc2)
  35. (setq zbpt1 (list x1 y1 '0))
  36.         (command "pline")       
  37.                (setq x (+ x 1))
  38.                 (calc1)
  39. (setq zbpt2 (list x1 y1 '0))
  40.         (command zbpt2)
  41.         (setq zbpt1 zbpt2)
  42.         (command "")
  43.      (setq x (- l3 l1))
  44. (setq zbpt2 (list x1 y1 '0))
  45. (command "Line" zbpt1 zbpt2 "")
  46. (princ)
  47. )
  48.         (defun calc1 ()
  49.           (setq dalt1 (- (+ b1 b2) beamh))
  50.            (setq ym1 (* l1 l3))
  51.           (setq y (-(* (/ dalt1 ym1) (* (+ x l3) (+ x l3))) dalt1))
  52.           (setq x1 (+ x x0))
  53.           (setq y1 (+ y y0))
  54.           )
  55. (defun calc2 ()
  56.          (defun calc2 ()
  57.             (setq dalt1 (- beamh (+ b1 b2)))
  58.            (setq xd2 (- l3 l1))
  59.          (setq y (*(/ dalt2 (* l3 xd2)) (* x x))
  60.           (setq x1 (+ x x0))
  61.           (setq y1 (+ y y0))
  62. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-12 11:04:52 | 显示全部楼层
(setq zbpt1 (polar bpt pi zbl))

在上面的表达式中一个变量pbt在前面没有定义

在程序当中左系数与中系数不能相同

相同的话会导致除数为0的错误

这一点需要进行判断

另L1可不可以比L3大这也和系数相关
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-12 19:22:35 | 显示全部楼层
还是不行
,麻烦那位大虾给我这只菜鸟改一改,谢谢啦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-14 16:51:21 | 显示全部楼层
先看看我改的程序,现在图是能画出来但和你所要求的不同

希望你能把设计思路说出来

  1. (defun c:qx ()
  2.   (setvar "cmdecho" 0)
  3.   (setq b1 (getint "\n左端高:"))
  4.   (setq b2 (getint "\n中端高:"))
  5.   (setq alfal (getreal "\n左系数:"))
  6.   (setq alfac (getreal "\n中系数:"))
  7.   (if (>= alfal alfac)
  8.     (progn
  9.       (setq alfal (getreal "\n错误,请重新输入左系数:"))
  10.       (setq alfac (getreal "\n请重新输入中系数:"))
  11.     )
  12.   )
  13.   (setq beamspan (getint "\n长度:"))
  14.   (setq beamh (getint "\n高度范围:"))
  15.   (setq pt000 (getpoint "\n坐标中心点:"))
  16.   (setq os (getvar "osmode"))
  17.   (setvar "osmode" 0)
  18.   (setq x0 (car pt000))                        ;取得中心点X轴坐标
  19.   (setq y0 (cadr pt000))                ;取得中心点Y轴坐标
  20.   (setq l1 (* alfal beamspan))                ;按系数计算L1
  21.   (setq l3 (* alfac beamspan))                ;按系数计算L3
  22.   ;;以下6行为以中心点画十字线
  23.   (setq zbpt1 (polar pt000 pi l3))
  24.   (setq zbpt2 (polar pt000 0 l3))
  25.   (command "Line" zbpt1 zbpt2 "")
  26.   (setq zbpt1 (polar pt000 (/ pi 2) l3))
  27.   (setq zbpt2 (polar pt000 (* pi 1.5) l3))
  28.   (command "Line" zbpt1 zbpt2 "")
  29.   ;;
  30.   (setq x (- 0 l3))
  31.   (calc1)
  32.   (setq zbpt1 (list x1 y1))                ;以X1、Y1组成ZBPT1点坐标
  33.   (command "pline")
  34.   (while (< x 0)
  35.     (setq x (+ x 1))
  36.     (calc1)
  37.     (setq zbpt2 (list x1 y1))
  38.     (command zbpt2)
  39.     (setq zbpt1 zbpt2)
  40.   )
  41.   (command "")
  42.   (setq x (- l3 l1))
  43.   (calc2)
  44.   (setq zbpt1 (list x1 y1))
  45.   (command "pline")
  46.   (while (> x 0)
  47.     (setq x (- x 1))
  48.     (calc2)
  49.     (setq zbpt2 (list x1 y1))
  50.     (command zbpt2)
  51.     (setq zbpt1 zbpt2)
  52.   )
  53.   (command "")
  54.   (setq x (- l3 l1))
  55.   (setq zbpt2 (list x1 y1))
  56.   (command "Line" zbpt1 zbpt2 "")
  57.   (setvar "osmode" os)
  58.   (princ)
  59. )
  60. ;;;-------------------------------------------------------------
  61. (defun calc1 ()
  62.   (setq dalt1 (- (+ b1 b2) beamh))
  63.   (setq ym1 (* l1 l3))
  64.   (setq y (- (* (/ dalt1 ym1) (* (+ x l3) (+ x l3))) dalt1))
  65.   (setq x1 (+ x x0))                        ;按中心点偏移
  66.   (setq y1 (+ y y0))                        ;按中心点偏移
  67. )
  68. ;;;-------------------------------------------------------------
  69. (defun calc2 ()
  70.   (setq dalt2 (- (+ b1 b2) beamh))
  71.   (setq xd2 (- l3 l1))
  72.   (setq y (* (/ dalt2 (* l3 xd2)) (* x x)))
  73.   (setq x1 (+ x x0))                        ;按中心点偏移
  74.   (setq y1 (+ y y0))                        ;按中心点偏移
  75. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-15 09:16:20 | 显示全部楼层
谢谢大虾的帮助,感激涕零,希望晓东有更多的热心人。
这其实是一个预应力筋放样曲线,预应力筋主要是由四段光滑曲线组成,这个程序是反映一半预应力的放样过程,也就是二段曲线连接而成,曲线方程即calc1 和calc2。calc1 的区间范围为-l3~(l1-l3),calc2 的区间范围为-(l1-l3)~0.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-18 14:09:51 | 显示全部楼层
对于预应力筋不了解,所以对这个曲线方程理解的不是很好

希望能把这两个方程用数学公式写一下

还有一个坐标中心点是哪一点,两段曲线的接点是不是落在坐标中心点上

左系数、中系数是什么,在曲线中如何确定应为多少
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 14:55:58 | 显示全部楼层
还是四楼的高明,仔细看看if语句吧,一个if后面跟了哪么多赋值语句,最多执行前两个,后面的都不会执行,用了progn就可以了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 11:53 , Processed in 0.238259 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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