C画缓和曲线lisp程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C画缓和曲线l i s p程

公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

CAD中画缓和曲线,首先复制本文☆后面的源程序保存至cad安装目录的SUPPORT文件夹,保存类型为.lsp 可以随便复制一个SUPPORT文件夹内的lsp 文件,然后替换本文的程序。打开CAD后,输入appload回车,找到你保存的缓和曲线lsp程序,点击加载,然后就可以画缓和曲线了。首先,要画出缓和曲线的两条直线,然后输入HH回车,按提示完成缓和曲线。

注:本程序,缓和曲线段拟合长度为,如需更改拟合长度,将程序的第8行(repeat (FIX(/ Ls )及9行(setq l (+ l (/ Ls (FIX(/ Ls )))中的修改即可。

;;多义线摹拟缓和曲线。

;;输入起止直线、半径、缓和曲线长或设计车速。

;;命令:HH

(defun com_p()

(setq l 0)

(command "ucs" "o" (list (- 0 x1) 0 0))

(command "pline" (list 0 0 0) "w" "0" ""

(repeat (FIX(/ Ls )

(setq l (+ l (/ Ls (FIX(/ Ls )))

x (+ (- l (/ (* l l l l l) 40 C C)) (/ (* l l l l l l l l l) 3456 C C C C))

y (* id__ (+ (- (/ (* l l l) 6 C) (/ (* l l l l l l l) 336 C C C)) (/ (* l l l l l l l l l l l) 42240 C C C C C)))

);setq

(command (list x y 0))

);repaet

);command

(setq pt5 (trans (list x y 0) 1 0))

);com_p

(defun ll_v()

(setq V (getreal "\nGive Velocity:")

Ls1 (* V

Ls2 (/ (* V V V) R)

Ls (max Ls1 Ls2 (/ R 9))

Ls (* (fix (/ Ls 10))

);setq

(if (> Ls R) (setq Ls R))

(ll_d)

);ll_v

(defun ll_d()

(setq os (getvar "osmode"))

(setvar "osmode" 0)

(setq C (* Ls R)

q (- (+ (- (/ Ls 2) (/ (* Ls Ls Ls) 240 R R)) (/ (* Ls Ls Ls Ls Ls) 34560 R R R R)) (/ (* Ls Ls Ls Ls Ls Ls Ls) 8386560 R R R R R R))

pt1 (cdr (assoc 10 (entget (car p1))))

pt2 (cdr (assoc 11 (entget (car p1))))

pt10(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))

pt3 (cdr (assoc 10 (entget (car p2))))

pt4 (cdr (assoc 11 (entget (car p2))))

pt20(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2))

p (+ (- (/ (* Ls Ls) 24 R) (/ (* Ls Ls Ls Ls) 2688 R R R)) (/ (* Ls Ls Ls Ls Ls Ls) 506880 R R R R R))

jd (inters pt1 pt2 pt3 pt4 nil)

alf1(angle pt10 jd)

alf2(angle pt20 jd)

alf (- (angle jd pt20) alf1)

);setq

(if (or (> alf pi) (and (< alf 0) (> alf (- 0 pi))))

(progn

(setq id__ -1)

(if (> alf pi) (setq alf (- (+ pi pi) alf)) (setq alf (abs alf)))

);progn

(progn

(setq id__ 1)

(if (<= alf (- 0 pi)) (setq alf (+ pi pi alf)))

);progn

);if

(setq x0 (/ (* (+ p R) (sin(/ alf )) (cos(/ alf ))

x1 (+ x0 q)

Cl (+ (* alf R) Ls)

E (- (/ (+ R p) (cos(/ alf 2))) R)

);setq

(command "ucs" "o" jd)

(command "ucs" "z" (/ (* 180 alf1) pi))

(com_p) (setq pt6 pt5)

(setq ppt1 (list x1 0 0))

(command "ucs" "")

(command "ucs" "o" jd)

(command "ucs" "z" (/ (* 180 alf2) pi))

(setq id__ (- 0 id__)) (com_p)

(setq ppt2 (list x1 0 0))

(command "ucs" "")

(if (> (abs(distance jd pt1)) (abs(distance jd pt2)))

相关文档
最新文档