先看看我改的程序,现在图是能画出来但和你所要求的不同
希望你能把设计思路说出来

- (defun c:qx ()
- (setvar "cmdecho" 0)
- (setq b1 (getint "\n左端高:"))
- (setq b2 (getint "\n中端高:"))
- (setq alfal (getreal "\n左系数:"))
- (setq alfac (getreal "\n中系数:"))
- (if (>= alfal alfac)
- (progn
- (setq alfal (getreal "\n错误,请重新输入左系数:"))
- (setq alfac (getreal "\n请重新输入中系数:"))
- )
- )
- (setq beamspan (getint "\n长度:"))
- (setq beamh (getint "\n高度范围:"))
- (setq pt000 (getpoint "\n坐标中心点:"))
- (setq os (getvar "osmode"))
- (setvar "osmode" 0)
- (setq x0 (car pt000)) ;取得中心点X轴坐标
- (setq y0 (cadr pt000)) ;取得中心点Y轴坐标
- (setq l1 (* alfal beamspan)) ;按系数计算L1
- (setq l3 (* alfac beamspan)) ;按系数计算L3
- ;;以下6行为以中心点画十字线
- (setq zbpt1 (polar pt000 pi l3))
- (setq zbpt2 (polar pt000 0 l3))
- (command "Line" zbpt1 zbpt2 "")
- (setq zbpt1 (polar pt000 (/ pi 2) l3))
- (setq zbpt2 (polar pt000 (* pi 1.5) l3))
- (command "Line" zbpt1 zbpt2 "")
- ;;
- (setq x (- 0 l3))
- (calc1)
- (setq zbpt1 (list x1 y1)) ;以X1、Y1组成ZBPT1点坐标
- (command "pline")
- (while (< x 0)
- (setq x (+ x 1))
- (calc1)
- (setq zbpt2 (list x1 y1))
- (command zbpt2)
- (setq zbpt1 zbpt2)
- )
- (command "")
- (setq x (- l3 l1))
- (calc2)
- (setq zbpt1 (list x1 y1))
- (command "pline")
- (while (> x 0)
- (setq x (- x 1))
- (calc2)
- (setq zbpt2 (list x1 y1))
- (command zbpt2)
- (setq zbpt1 zbpt2)
- )
- (command "")
- (setq x (- l3 l1))
- (setq zbpt2 (list x1 y1))
- (command "Line" zbpt1 zbpt2 "")
- (setvar "osmode" os)
- (princ)
- )
- ;;;-------------------------------------------------------------
- (defun calc1 ()
- (setq dalt1 (- (+ b1 b2) beamh))
- (setq ym1 (* l1 l3))
- (setq y (- (* (/ dalt1 ym1) (* (+ x l3) (+ x l3))) dalt1))
- (setq x1 (+ x x0)) ;按中心点偏移
- (setq y1 (+ y y0)) ;按中心点偏移
- )
- ;;;-------------------------------------------------------------
- (defun calc2 ()
- (setq dalt2 (- (+ b1 b2) beamh))
- (setq xd2 (- l3 l1))
- (setq y (* (/ dalt2 (* l3 xd2)) (* x x)))
- (setq x1 (+ x x0)) ;按中心点偏移
- (setq y1 (+ y y0)) ;按中心点偏移
- )
|