在AutoCAD中畫緩和曲線比較困難,目前常用的畫法有AutoLISP程序法(需要已知曲線要素)、坐標腳本法(需事先計算好各特征點及其他點為的坐標)、曲線命令法(需事先準備各特征點坐標),現(xiàn)分別介紹如下:

畫法一:緩和曲線AutoLISP 應(yīng)用程序

一、制作緩和曲線AutoLISP 應(yīng)用程序

復(fù)制AutoLISP程序源代碼,打開“記事本”,粘貼進去后,另存為文件名“緩和曲線.LSP”,保存類型為“所有文件”AutoLISP程序源代碼見附件

二、加載緩和曲線AutoLISP應(yīng)用程序

 

 

畫法二:坐標腳本法

 

1.現(xiàn)做一個CAD腳本,會的人跳過(用Windows 文本 另存為“.scr”文件)
2.腳本編輯輸入“SPLINE+空格鍵+Y坐標+,+X坐標+空格鍵+Y坐標+,+X坐標……” 以此類推!點輸?shù)脑矫,線條越平滑。也可以用EXCEL算出各個點的坐標后粘貼進去,然后按照“SPLINE+空格鍵+Y坐標+,+X坐標+空格鍵+Y坐標+,+X坐標……”格式編輯。
3.進入CAD,運行腳本,就行了!
注意:你可能輸入了100個點,而出現(xiàn)的確只有幾個點,這個很正常,你把圖像刪除了,多運行幾次就行,一般不超過4次。

 

畫法三:使用真樣條曲線命令

 

 

 

舉例如下:

輸入導(dǎo)線:pline命令繪制1、2、3各點,其對應(yīng)坐標如下
x1=213.7748 y1=92.1117
x2=313.7748 y2=92.1117
x3=399.6787 y3=143.3026
繪制通過ZH、HZ、QZ、HY和YH各點的與路線導(dǎo)線相切的含緩和曲線的平曲線。
通過計算,五個點的直角坐標為:
ZH:X=232.9548 Y=92.1117
HY:X=285.3608 Y=94.4667
QZ:X=311.8101 Y=99.2371
YH:X=336.9780 Y=108.6801
HZ:X=383.6319 Y=133.7401
使用真樣條曲線命令繪制含緩和曲線的平曲線的基本操作步驟如下:
Command(命令): Spline(啟動真樣條曲線命令)
object/<Enter first point>(指定起點):232.9548,92.1117(通過ZH)
Enter point :285.3608,94.4667
Close/Fit Tolerance/<Enter point>(指定下一個點):311.8101,99.2371<通過QZ>
Close/Fit Tolerance/<Enter point>指定下一個點:336.9708,108.6801<通過YH>
Close/Fit Tolerance/<Enter point>指定下一個點:383.6319,133.7401<通過HZ>
Close/Fit Tolerance/<Enter point>指定下一個點:<加如回車>(選擇輸入切點的模式)
Enter star tangent(指定起點切向):232.9548,92.1117 (輸入起點切點)
Enter star tangent(指定端點切向):383.6319,133.7401 (輸入終點的切點)

附件:緩和曲線AutoLISP 程序源代碼

;;多義線摹擬緩和曲線。
;;輸入起止直線、半徑、緩和曲線長或設(shè)計車速。
;;命令:HH
(defun com_p()
(setq l 0)
(command "ucs" "o" (list (- 0 x1) 0 0))
(command "pline" (list 0 0 0) "w" "0" ""
(repeat 1000
(setq l (+ l (/ Ls 1000))
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 0.85)
Ls2 (/ (* 0.0357 V V V) R)
Ls (max Ls1 Ls2 (/ R 9))
Ls (* (fix (/ Ls 10)) 10.0)
);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 2.0))) (cos(/ alf 2.0)))
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)))
(setq ptt1 pt1)
(setq ptt1 pt2)
);if
(setq ptt2 (polar jd alf1 (- 0 x1)))
(thh p1 ptt1 10)
(thh p1 ptt2 11)
(if (> (abs(distance jd pt3)) (abs(distance jd pt4)))
(setq ptt3 pt3)
(setq ptt3 pt4)
);if
(setq ptt4 (polar jd alf2 (- 0 x1)))
(thh p2 ptt3 10)
(thh p2 ptt4 11)
(if (= id__ 1) (command "arc" pt5 "e" pt6 "r" R) (command "arc" pt6 "e" pt5 "r" R))
(setq alfd (angf alf))
(setvar "osmode" os)
(command "cmdecho" "1")
(command "text" pause pause "" (strcat "偏   角=" alfd))
(command "cmdecho" "0")
(command "text" "" (strcat "半   徑=" (rtos R 2 2)))
(command "text" "" (strcat "切 線 長=" (rtos x1 2 2)))
(command "text" "" (strcat "曲 線 長=" (rtos Cl 2 2)))
(command "text" "" (strcat "外   距=" (rtos E 2 2)))
(command "text" "" (strcat "緩和曲線長=" (rtos Ls 2 2)))
);ll_d


(defun angf (alf)
(setq alff (angtos alf 1 4)
n 1
kk (strlen alff))
(repeat kk
(setq alfn (substr alff n 1))
(if (= alfn "d")
(setq nn n));if
(setq n (+ n 1))
);repeat
(strcat (substr alff 1 (- nn 1)) "%%" (substr alff nn))
);angf

(defun c:hh(/ p1 p2 pt1 pt2 pt3 pt4 pt5 pt6 pt10 pt20 id__ R V Ls E p3
r1 x y l x0 x1 C jd alf alf1 alf2 q p Cl Ls1 Ls2)
(command "ucs" "")
(setq p1 nil p2 nil)
(while (= p1 nil) (setq p1 (entsel "\n拾取第一條直線:")))
(redraw (car p1) 3)
(while (= p2 nil) (setq p2 (entsel "\n拾取第二條直線:")))
(redraw (car p2) 3)
(initget 1)
(setq R (getdist "\n請輸入彎道半徑 R: "))
(initget 1 "Ls V")
(setq p3 (getdist "\n輸入緩和曲線長度(Ls)或[設(shè)計速度(V)]: "))
(if (= p3 "V") (ll_v) (progn (setq ls p3) (ll_d)))
(princ)
);eline

(defun thh(len pt h)
(setq en_data (entget (car len))
old_data (assoc h en_data)
new_data (cons h pt)
en (subst new_data old_data en_data));setq
(entmod en)
);thh

 

 

在命令行輸入“appload”打開自動加載對話框。在對話框的“查找范圍”里找到“緩和曲線.LSP”的那個程序,選中后,點擊【加載】,顯示“已成功加載緩和曲線.LSP”后,關(guān)閉對話框,ok你那個程序自動啟動加載了。

三、在CAD中畫出切線長

四、運行程序在命令行中輸入hh回車

五、選擇兩條切線,然后輸入曲線半徑 如:2204.5回車

六、輸入緩和曲線長,270,繪圖完成!