
lisp 里 defun 函数 为什么这样写运行总是提示参数太少
(defunC:pqx(/pjelsabcrttlyla0a1a2aa0aa1aa2p1p2p3p4p5)(setqpj(getangle"\n请输入路线偏角角度:"))...
(defun C:pqx (/pj e ls a b c r tt ly l a0 a1 a2 aa0 aa1 aa2 p1 p2 p3 p4 p5)
(setq pj (getangle "\n 请输入路线偏角角度:")) ;输入角度getangle返回弧度
(setq e (getreal "\n 请输入控制外距E:"))
(setq ls (getreal"\n 请输入拟定缓和曲线长Ls:"))
(setq a (- (/ 1 (cos (/ pj 2))) 1))
(setq b (- 0 e))
(setq c (* (/ 1 (cos (/ pj 2))) (/ (* ls ls) 24)))
(setq r (/ (- (sqrt (- (* b b) (* 4 a c))) b) (* 2 a))) ;
(setq tt (+ (* (+ r (/ (* ls ls) (* 24 r))) (/ (sin (/ pj 2)) (cos (/ pj 2)))) (/ ls 2)))
(setq e (- (/ (+ r (/ (* ls ls) (* 24 r))) (cos (/ pj 2))) r))
(setq ly (- (* pj r) ls))
(setq l (+ ly (* 2 ls)))
(setq a0 (* (/ l r) (/ 180 pi)))
(setq a1 (- 90 (/ a0 2)))
(setq a2 (+ 90 (/ a0 2)))
(setq aa0 (* (/ ly r) (/ 180 pi)))
(setq aa1 (- 90 (/ aa0 2)))
(setq aa2 (+ 90 (/ aa0 2)))
(setq p1 (list (* r (cos (/ (* a1 pi) 180))) (* r (sin (/ (* a1 pi) 180)))
)
)
(setq p2 (list (* r (cos (/ (* a2 pi) 180))) (* r (sin (/ (* a2 pi) 180)))
)
)
(setq p3 (list (- (car p1) (* tt (cos (/ pi 2)))) (+ (cadr p1) (* tt (sin (/ pi 2))))
)
)
(setq p4 (list (* r (cos (/ (* aa1 pi) 180))) (* r (sin (/ (* aa1 pi) 180)))
)
)
(setq p5 (list (* r (cos (/ (* aa2 pi) 180))) (* r (sin (/ (* aa2 pi) 180)))
)
)
;绘制平曲线
(command "line" p1 p4 p3 p5 p2 "")
(command "arc" p4 "en" p5 "r" r "")
(command "zoom" "e" "")
(command "regen" "")
;在平曲线上注写参数
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 3)) "2" ""
(strcat "路线偏角pj=" (rtos pj)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 6)) "2" ""
(strcat "圆曲线半径R=" (rtos r)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 9)) "2" ""
(strcat "缓和曲线长LS=" (rtos ls)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 12)) "2" ""
(strcat "切线长T=" (rtos tt)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 15)) "2" ""
(strcat "圆曲线长ly=" (rtos ly)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 18)) "2" ""
(strcat "平曲线长l=" (rtos l)) ""
)
;在命令行打印参数
(princ (strcat "\n 路线偏角pj=" (rtos pj)))
(princ (strcat "\n 圆曲线半径R=" (rtos r)))
(princ (strcat "\n 缓和曲线长ls=" (rtos ls)))
(princ (strcat "\n 切线长T=" (rtos tt)))
(princ (strcat "\n 圆曲线长ly=" (rtos ly)))
(princ (strcat "\n 平曲线总长L=" (rtos l))) 展开
(setq pj (getangle "\n 请输入路线偏角角度:")) ;输入角度getangle返回弧度
(setq e (getreal "\n 请输入控制外距E:"))
(setq ls (getreal"\n 请输入拟定缓和曲线长Ls:"))
(setq a (- (/ 1 (cos (/ pj 2))) 1))
(setq b (- 0 e))
(setq c (* (/ 1 (cos (/ pj 2))) (/ (* ls ls) 24)))
(setq r (/ (- (sqrt (- (* b b) (* 4 a c))) b) (* 2 a))) ;
(setq tt (+ (* (+ r (/ (* ls ls) (* 24 r))) (/ (sin (/ pj 2)) (cos (/ pj 2)))) (/ ls 2)))
(setq e (- (/ (+ r (/ (* ls ls) (* 24 r))) (cos (/ pj 2))) r))
(setq ly (- (* pj r) ls))
(setq l (+ ly (* 2 ls)))
(setq a0 (* (/ l r) (/ 180 pi)))
(setq a1 (- 90 (/ a0 2)))
(setq a2 (+ 90 (/ a0 2)))
(setq aa0 (* (/ ly r) (/ 180 pi)))
(setq aa1 (- 90 (/ aa0 2)))
(setq aa2 (+ 90 (/ aa0 2)))
(setq p1 (list (* r (cos (/ (* a1 pi) 180))) (* r (sin (/ (* a1 pi) 180)))
)
)
(setq p2 (list (* r (cos (/ (* a2 pi) 180))) (* r (sin (/ (* a2 pi) 180)))
)
)
(setq p3 (list (- (car p1) (* tt (cos (/ pi 2)))) (+ (cadr p1) (* tt (sin (/ pi 2))))
)
)
(setq p4 (list (* r (cos (/ (* aa1 pi) 180))) (* r (sin (/ (* aa1 pi) 180)))
)
)
(setq p5 (list (* r (cos (/ (* aa2 pi) 180))) (* r (sin (/ (* aa2 pi) 180)))
)
)
;绘制平曲线
(command "line" p1 p4 p3 p5 p2 "")
(command "arc" p4 "en" p5 "r" r "")
(command "zoom" "e" "")
(command "regen" "")
;在平曲线上注写参数
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 3)) "2" ""
(strcat "路线偏角pj=" (rtos pj)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 6)) "2" ""
(strcat "圆曲线半径R=" (rtos r)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 9)) "2" ""
(strcat "缓和曲线长LS=" (rtos ls)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 12)) "2" ""
(strcat "切线长T=" (rtos tt)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 15)) "2" ""
(strcat "圆曲线长ly=" (rtos ly)) ""
)
(command "text" "j" "tl" (list (car p5) (- (cadr p5) 18)) "2" ""
(strcat "平曲线长l=" (rtos l)) ""
)
;在命令行打印参数
(princ (strcat "\n 路线偏角pj=" (rtos pj)))
(princ (strcat "\n 圆曲线半径R=" (rtos r)))
(princ (strcat "\n 缓和曲线长ls=" (rtos ls)))
(princ (strcat "\n 切线长T=" (rtos tt)))
(princ (strcat "\n 圆曲线长ly=" (rtos ly)))
(princ (strcat "\n 平曲线总长L=" (rtos l))) 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询