[討論]如何使用功能變數自動繪製拋物線線型?
3 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 2D討論
第1頁(共1頁)
[討論]如何使用功能變數自動繪製拋物線線型?
抱歉,找不到板上有關拋物線的問題,在這裡向各位資深大大請益
如圖所示 ↑ 這橋的拱肋給了拋物線的方程式
我想請問有沒有辦法利用CAD裡的功能變數,直接套用公式把拱肋線型畫出來
我有嘗試了幾次,但真的不是很熟練這個功能,希望有經驗的大大能略為指點,感恩。
我之前的方式是將公式拿到EXCEL算,雖然可以算出每個點的高程,
如果求快就只能分較少段,那麼線段連起來會不夠圓滑,若分的太多段,又太費時費工。
或者,除了功能變數,有沒有其它簡潔省時的繪製方式?
如圖所示 ↑ 這橋的拱肋給了拋物線的方程式
我想請問有沒有辦法利用CAD裡的功能變數,直接套用公式把拱肋線型畫出來
我有嘗試了幾次,但真的不是很熟練這個功能,希望有經驗的大大能略為指點,感恩。
我之前的方式是將公式拿到EXCEL算,雖然可以算出每個點的高程,
如果求快就只能分較少段,那麼線段連起來會不夠圓滑,若分的太多段,又太費時費工。
或者,除了功能變數,有沒有其它簡潔省時的繪製方式?
exuviation- 初級會員
- 文章總數 : 61
年齡 : 41
來自 : Taipei
職業 : 營造
愛好 : learn
個性 : 樂觀
使用年資 : Novice
使用版本 : 2016
積分 : 2
經驗值 : 5440
威望值 : 51
注冊日期 : 2010-10-12
回復: [討論]如何使用功能變數自動繪製拋物線線型?
這類比較專業的計算,AutoCAD並不提供客製化的功能~
可能要找其他替代軟體喔!
可能要找其他替代軟體喔!
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]如何使用功能變數自動繪製拋物線線型?
下面的程序是對岸的precon的網友寫的lisp,
一個是用pline模擬拋物線(三點、二點及公式畫拋物線),一個是spline模擬拋物線(三點、二點及公式畫拋物線)。
這是pline!
這個是spline!
一個是用pline模擬拋物線(三點、二點及公式畫拋物線),一個是spline模擬拋物線(三點、二點及公式畫拋物線)。
這是pline!
- 代碼:
(defun C:pwx
(/ a b c dd ded dsd dx p pz stpt stx x x1 x2 x3 y y1 y2 y3)
(setq pz (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
(setq k (getreal
"\n選擇方式[1.通過三點] [2.通過兩點] [3.通過公式]:"
)
)
(if (= k nil)
(setq k 1)
)
(if (= k 1)
(progn (command "undo" "begin")
(setq dd (getpoint "\n拋物線的第一點:"))
(setq x1 (nth 0 dd))
(setq y1 (nth 1 dd))
(setq ded (getpoint "\n拋物線的第二點:"))
(setq x2 (nth 0 ded))
(setq y2 (nth 1 ded))
(setq dsd (getpoint "\n拋物線的第三點:"))
(setq x3 (nth 0 dsd))
(setq y3 (nth 1 dsd))
(setq dx (/ (- x3 x1) 500))
(setq a (/ (- (* (- y1 y2) (- x1 x3)) (* (- y1 y3) (- x1 x2)))
(- (* (- (* x1 x1) (* x2 x2)) (- x1 x3))
(* (- (* x1 x1) (* x3 x3)) (- x1 x2))
)
)
)
(setq b (/ (- (* (- (* x1 x1) (* x2 x2)) (- y1 y3))
(* (- (* x1 x1) (* x3 x3)) (- y1 y2))
)
(- (* (- (* x1 x1) (* x2 x2)) (- x1 x3))
(* (- (* x1 x1) (* x3 x3)) (- x1 x2))
)
)
)
(setq c (- y1 (* a x1 x1) (* b x1)))
(setq x x1
y y1
)
(setq stpt (list x1 y1))
(command "PLINE" stpt)
(repeat 500
(setq x (+ dx x))
(setq y (+ (* a x x) (* b x) c))
(setq p (list x y))
(command p)
)
(command "")
(command "undo" "end")
(princ)
)
)
(if (= k 2)
(progn (command "undo" "begin")
(setq dd (getpoint "\n拋物線的頂點:"))
(setq x1 (nth 0 dd))
(setq y1 (nth 1 dd))
(setq ded (getpoint "\n拋物線的第二點:"))
(setq x2 (nth 0 ded))
(setq y2 (nth 1 ded))
(setq dx (/ (- x2 x1) 500))
(setq a (/ (- y2 y1) (* (- x2 x1) (- x2 x1))))
(setq x x1
y y1
)
(setq stpt (list x1 y1))
(command "PLINE" stpt)
(repeat 500
(setq x (+ dx x))
(setq y (+ y1 (* a (* (- x x1) (- x x1)))))
(setq p (list x y))
(command p)
)
(command "")
(command "undo" "end")
(princ)
)
)
(if (= k 3)
(progn (command "undo" "begin")
(setq a (getreal "\n拋物線的a值<0.01>:"))
(if (= a nil)
(setq a 0.001)
)
(setq b (getreal "\n拋物線的b值<0.01>:"))
(if (= b nil)
(setq b 0.001)
)
(setq c (getreal "\n拋物線的c值<0.01>:"))
(if (= c nil)
(setq c 0.001)
)
(setq pz (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
(setq stx 0
endx 500
)
(setq dx (/ (- endx stx) 500))
(setq x stx)
(setq y (+ (* a stx stx) (* b stx) c))
(command "PLINE" (list x y))
(repeat 500
(setq x (+ dx x))
(setq y (+ (* a x x) (* b x) c))
(setq p (list x y))
(command p)
)
(command "")
(command "undo" "end")
(princ)
)
)
(setvar "osmode" pz)
(setvar "cmdecho" 1)
(princ)
)
這個是spline!
- 代碼:
(defun C:pwx
(/ a b c dd ded dsd dx p pz stpt stx x x1 x2 x3 y y1 y2 y3)
(setq pz (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
(setq k (getreal
"\n選擇方式[1.通過三點] [2.通過兩點] [3.通過公式]:"
)
)
(if (= k nil)
(setq k 1)
)
(if (= k 1)
(progn (command "undo" "begin")
(setq dd (getpoint "\n拋物線的第一點:"))
(setq x1 (nth 0 dd))
(setq y1 (nth 1 dd))
(setq ded (getpoint "\n拋物線的第二點:"))
(setq x2 (nth 0 ded))
(setq y2 (nth 1 ded))
(setq dsd (getpoint "\n拋物線的第三點:"))
(setq x3 (nth 0 dsd))
(setq y3 (nth 1 dsd))
(setq dx (/ (- x3 x1) 500))
(setq a (/ (- (* (- y1 y2) (- x1 x3)) (* (- y1 y3) (- x1 x2)))
(- (* (- (* x1 x1) (* x2 x2)) (- x1 x3))
(* (- (* x1 x1) (* x3 x3)) (- x1 x2))
)
)
)
(setq b (/ (- (* (- (* x1 x1) (* x2 x2)) (- y1 y3))
(* (- (* x1 x1) (* x3 x3)) (- y1 y2))
)
(- (* (- (* x1 x1) (* x2 x2)) (- x1 x3))
(* (- (* x1 x1) (* x3 x3)) (- x1 x2))
)
)
)
(setq c (- y1 (* a x1 x1) (* b x1)))
(setq qdx (- dx x1)
qdy (+ (* a (- dx x1) (- dx x1)) (* b (- dx x1)) c)
)
(setq zdx (+ dx x3)
zdy (+ (* a (+ dx x3) (+ dx x3)) (* b (+ dx x3)) c)
)
(setq qdqx (list qdx qdy))
(setq zdqx (list zdx zdy))
(setq x x1
y y1
)
(setq stpt (list x1 y1))
(command "spline" stpt)
(repeat 500
(setq x (+ dx x))
(setq y (+ (* a x x) (* b x) c))
(setq p (list x y))
(command p)
)
(command "")
(command qdqx)
(command zdqx)
(command "undo" "end")
(princ)
)
)
(if (= k 2)
(progn (command "undo" "begin")
(setq dd (getpoint "\n拋物線的頂點:"))
(setq x1 (nth 0 dd))
(setq y1 (nth 1 dd))
(setq ded (getpoint "\n拋物線的第二點:"))
(setq x2 (nth 0 ded))
(setq y2 (nth 1 ded))
(setq dx (/ (- x2 x1) 500))
(setq a (/ (- y2 y1) (* (- x2 x1) (- x2 x1))))
(setq qdx (- dx x1)
qdy (+ y1 (* a (* (- (- dx x1) x1) (- (- dx x1) x1))))
)
(setq zdx (+ dx x2)
zdy (+ y1 (* a (* (- (+ dx x2) x1) (- (+ dx x2) x1))))
)
(setq qdqx (list qdx qdy))
(setq zdqx (list zdx zdy))
(setq x x1
y y1
)
(setq stpt (list x1 y1))
(command "SPLINE" stpt)
(repeat 500
(setq x (+ dx x))
(setq y (+ y1 (* a (* (- x x1) (- x x1)))))
(setq p (list x y))
(command p)
)
(command "")
(command qdqx)
(command zdqx)
(command "undo" "end")
(princ)
)
)
(if (= k 3)
(progn (command "undo" "begin")
(setq a (getreal "\n拋物線的a值<0.01>:"))
(if (= a nil)
(setq a 0.001)
)
(setq b (getreal "\n拋物線的b值<0.01>:"))
(if (= b nil)
(setq b 0.001)
)
(setq c (getreal "\n拋物線的c值<0.01>:"))
(if (= c nil)
(setq c 0.001)
)
(setq stx 0
endx 500
)
(setq dx (/ (- endx stx) 500))
(setq qdx (- dx stx)
qdy (+ (* a (- dx stx) (- dx stx)) (* b (- dx stx)) c)
)
(setq zdx (+ dx endx)
zdy (+ (* a (+ dx endx) (+ dx endx)) (* b (+ dx endx)) c)
)
(setq qdqx (list qdx qdy))
(setq zdqx (list zdx zdy))
(setq x stx)
(setq y (+ (* a stx stx) (* b stx) c))
(command "SPLINE" (list x y))
(repeat 500
(setq x (+ dx x))
(setq y (+ (* a x x) (* b x) c))
(setq p (list x y))
(command p)
)
(command "")
(command qdqx)
(command zdqx)
(command "undo" "end")
)
)
(setvar "osmode" pz)
(setvar "cmdecho" 1)
(princ)
)
Atsai- 中級會員
- 文章總數 : 167
年齡 : 49
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 5930
威望值 : 524
注冊日期 : 2012-04-06
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 2D討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章