蓅姩╮逝 发表于 2012-5-20 21:58:26

绘制缓和曲线时参数类型错误

这是我从资料上看到的绘制缓和曲线的程序,运行时提示 参数类型错误: 二维/三维点: nil,求高手指点!谢谢!!
(defun c:qx()
(prompt "沿逆时针方向依次选取曲线两端切线上的各两个点")
(setq pt1 (getpoint "\n 起点端切线上第一点:"))
(setq pt2 (getpoint "\n 起点端切线上第二点:"))
(setq pt3 (getpoint "\n 终点端切线上第一点:"))
(setq pt4 (getpoint "\n 终点端切线上第二点:"))
(curvecal);调用曲线要素计算子程序
(setq jd (inters p1 p2 p3 p4 nil))
(setq pzh (polar jd (angle pt2 pt1) t))
(setq zh pzh)
(setq phz (polar jd alf2 t))
(setq hz phz)
(command "layer" "set" "0" "")
(command "line" jd pzh "" "line" jd phz "")
(command "layer" "m" "qx" "color" "9" "" "new" "qx" "")
(hy_hy);调用绘制直缓点至缓圆点段缓和曲线子程序
(yh_yh);调用绘制缓直点至圆缓点段缓和曲线子程序
(if (= l0 0)
(setq zy zh yz hz hy zh yh hz))
(yqx);调用绘制圆曲线子程序
(command "layer" "set" "0" "")
)
;曲线要素计算子程序
(defun curvecal()
   (setq alf1 (angle pt1 pt2))
   (setq alf2 (angle pt3 pt4))
   (setq alf (- alf2 alf1))
   (if (< alf 0)
   (setq alf (+ alf (* 2 pi))))
   (setq a (* alf 0.5))
   (setq tga (/ (sin a) (cos a)))
   (setq tgaf (/ (sin alf) (cos alf)))
   (setq R (getreal"\n 输入圆曲线半径R: "))
   (setq l0 (getreal"\n 输入缓和曲线长l0: "))
   (setq m (- (/ l0 2.0) (/ (expt l0 3) (* 240.0 (expt R 2)))))
   (setq p (- (/ (expt l0 2) (* 24.0 R)) (/ (expt l0 4) (* 2688.0 (expt R 3)))))
   (setq tana (/ (sin a) (cos a)))
   (setq t (+ m (* (+ R p) tana)))
   (setq k (+ l0 (* R alf)))
   (setq e (- (/ (+ R p) (cos a)) R))
)
;绘制直缓点至缓圆点段缓和曲线子程序
(defun hy_hy()
   (setq rd pzh)
   
   (setq kk 1 ll 10.0)
   (setq n (/ l0 10.0))
   (while (<= ll l0)
   (setq b0 (/ l0 (* 2 R)))
   (setq dt0 (/ b0 3))
   (setq dt (/ dt0 (* n n)))
   (setq dt1 (* dt kk kk))
   (setq aff (+ alf1 dt1))
   (setq cc (+ (- ll (/ (expt ll 3) (* 90 (expt R 2)))) (/ (expt ll 5) (* 3888 (expt R 4)))))
   (setq dd (polar rd aff cc))
   (command "pline" pzh dd "")
   (setq ll (+ ll 10.0))
   (setq pzh dd)
   (setq kk (+ kk 1))
   )
   (setq hy dd)
)
;绘制缓直点至圆缓点段缓和曲线子程序
(defun yh_yh()
   (setq rd phz)
   (setq kk 1 ll 10.0)
   (setq n (/ l0 10.0))
   (while (<= ll l0)
   (setq b0 (/ l0 (* 2 R)))
   (setq dt0 (/ b0 3))
   (setq dt (/ dt0 (* n n)))
   (setq dt1 (* dt kk kk))
   (setq af3 (angle pt4 jd))
   (setq aff (- af3 dt1))
   (setq cc (+ (- ll (/ (expt ll 3) (* 90 (expt R 2)))) (/ (expt ll 5) (* 3888 (expt R 4)))))
   (setq dd (polar rd aff cc))
   (command "pline" phz dd "")
   (setq ll (+ ll 10.0))
   (setq phz dd)
   (setq kk (+ kk 1))
   )
   (setq yh dd)
)
;绘制圆曲线子程序
(defun yqx()
   (command "arc" hy "e" yh "radius" R)
)

sieben 发表于 2012-5-20 22:39:11

(setq phz (polar jd alf2 t))
-----------------
alf2 未曾赋值

蓅姩╮逝 发表于 2012-5-21 22:09:09

sieben 发表于 2012-5-20 22:39 static/image/common/back.gif
(setq phz (polar jd alf2 t))
-----------------
alf2 未曾赋值

谢谢您的回复,可是alf2在曲线要素计算子程序中已经赋值了

蓅姩╮逝 发表于 2012-5-21 23:35:58

sieben 发表于 2012-5-20 22:39 static/image/common/back.gif
(setq phz (polar jd alf2 t))
-----------------
alf2 未曾赋值

老师,麻烦您再给看看,谢谢了!!!

utx552258 发表于 2012-5-21 23:48:28

,气吞山河,坚韧不拔,身体力行,空前绝后,视死如归,英姿焕发,奉公守法,艰苦奋斗,忠贞不%D

yjpzc 发表于 2012-9-6 11:58:17

要将 alf2 做为全局变量考虑

yjpzc 发表于 2012-9-6 12:42:03

(setq jd (inters pt1 pt2 pt3 pt4 nil))
页: [1]
查看完整版本: 绘制缓和曲线时参数类型错误