歡迎來到http://www.nvlbio.live !
當前位置:六六工程資料網建筑課堂工程資料工程測量曲線線元繪制(LISP)函數

曲線線元繪制(LISP)函數

08-22 13:45:33  瀏覽次數:839次  欄目:工程測量
標簽:工程測量規范,工程測量技術, 曲線線元繪制(LISP)函數,http://www.nvlbio.live
曲線線元繪制(LISP)函數 ;一、約定
       ; (1) 以道路中線的前進方向(即里程增大的方向)區分左右;當線元往左偏時,
;線元偏向標志=-1;當線元往右偏時,線元偏向標志=1;當線元為直線時,線元偏向標志=0。
        ;(2) 當所求點位于中線時,邊距=0;當位于中線左鍘時,邊距取負值;當位于中線中線右
;側時,邊距取正值。
       ; (3) 當線元為直線時,其起點、止點的曲率半徑為無窮大,以10的45次代替。
        ;(4) 當線元為圓曲線時,無論其起點、止點與什么線元相接,其曲率半徑均等于圓
;弧的半徑。
         ;(5) 當線元為完整緩和曲線時,起點與直線相接時,曲率半徑為無窮大,以10的45
;次代替;與圓曲線相接時,曲率半徑等于圓曲線的半徑。止點與直線相接時,曲率半
;徑為無窮大,以10的45次代替;與圓曲線相接時,曲率半徑等于圓曲線的半徑。
         ;(6) 當線元為非完整緩和曲線時,起點與直線相接時,曲率半徑等于設計規定的
;值;與圓曲線相接時,曲率半徑等于圓曲線的半徑。止點與直線相接時,曲率半徑等
;于設計規定的值;與圓曲線相接時,曲率半徑等于圓曲線的半徑。
;二、功能
;在Auto CAD中按1:1000比例繪制曲線線元(直線、圓曲線、完整緩和曲線、非完整型緩和曲線)。
;三、源程序
;==================  test  ========================================================
;測試函數
(defun c:test()
  (setq xyys (list
        (list 500.000 19942.837 28343.561 2.186466069 269.256 1E45   1E45     0)
               (list 769.256 19787.340 28563.378 2.186466069  37.492 1E45   221.75   -1)
        (list 806.748 19766.566 28594.574 2.101929446 112.779 221.75 221.75   -1)
        (list 919.527 19736.072 28701.893 1.593343217  80.285 221.75 9579.228 -1)
        (list 999.812 19744.038 28781.659 1.408141337 100.000 1E45   1E45      0)
      )
 n    (length xyys)  i 0
  )
  (repeat n
     (hqxxy (nth i xyys))
     (setq i (1+ i))
  )
)
;================   hqxxy ========================================================
;給制曲線線元函數
;入口參數線元要素xyb為:
;xyb=(線元起點里程  線元起點X坐標  線元起點Y坐標  線元起點切線方位角(以弧度為單位)
; 線元長度    線元起點曲率半徑  線元止點曲率半徑   線元偏向標志)
(defun hqxxy(xyb / s0 x0 y0 f0 ls r0 rn q pt0  ptn sn xyn x1 x2 y1 y2 mj ptt pp s i n)
  (setq cm (getvar "cmdecho") os (getvar "osmode"))
  (setvar "cmdecho" 0)(setvar "osmode" 0)
  (setq s0 (nth 0 xyb)  x0 (nth 1 xyb)  y0 (nth 2 xyb)  f0 (nth 3 xyb)
 ls (nth 4 xyb)  r0 (nth 5 xyb)  rn (nth 6 xyb)  q  (nth 7 xyb)
 pt0 (list y0 x0)
 sn (+ s0 ls)
 xyn (qxzs xyb (list sn 0))
 ptn (list (cadr xyn) (car xyn))
 x1 x0  y1 y0
 x2  (car xyn) y2 (cadr xyn)

  )
  (if (< x2 x1) (setq x1 x2 x2 x0))
  (if (< y2 y1) (setq y1 y2 y2 y0))
  (command "undo" "be")
  (command "zoom" "w" (list (- y1 200) (- x1 200) 0) (list (+ y2 200) (+ x2 200) 0))
  (cond ((and (= r0 rn) (= r0 1e45)) (command "line" pt0 ptn ""))
 ((and (= r0 rn) (< r0 1e45))
     (setq ptt (polar pt0 (+ f0 (* q 0.5 pi)) r0)
    mj  (sjxmj pt0 ptn ptt)
     )
     (if (and (> q 0) (< mj 0)) (setq pp pt0 pt0 ptn ptn pp))
     (if (and (< q 0) (< mj 0)) (setq pp pt0 pt0 ptn ptn pp))
     (command "_arc"  pt0 "e" ptn  "r" r0)
 )
 (t  (command "pline")
     (setq n  (+ 2 (fix (/ ls 0.5))) i 0)
            (repeat n
               (setq s (+ s0 (* i 0.5)))
               (if (> s sn) (setq s sn))
               (setq xyn (qxzs xyb (list s 0)))
               (command (list (cadr xyn) (car xyn)))
               (setq i (1+ i))
     )
     (command "")
 )
  )
  (command "undo" "e")
  (setvar "cmdecho" cm)(setvar "osmode" os)(princ)
     
)
;=======================      qxzs      ==============================================
;正算函數(由里程和邊距計算坐標)
;入口參數線元要素xyb及sz為:
;xyb=(線元起點里程  線元起點X坐標  線元起點Y坐標  線元起點切線方位角(以弧度為單位)
; 線元長度    線元起點曲率半徑  線元止點曲率半徑   線元偏向標志)
;sz=(要計算點的中線里程   要計算點距中線的邊距)
;返回值=(所求點的X坐標   所求點的Y坐標   所求點的法線方位角)
(defun qxzs(xyb sz / f0 q c d rr vv i xs ys w ri vl ff f)
    (setq f0 (nth 3 xyb)  q  (nth 7 xyb)
   c  (/ 1.0 (nth 5 xyb))
   d  (/ (- (nth 5 xyb) (nth 6 xyb)) 2.0 (nth 4 xyb) (nth 5 xyb) (nth 6 xyb))
          rr '(0.1739274226 0.3260725774 0.3260725774 0.1739274226)
   vv '(0.0694318442 0.3300094782 0.6699905218 0.9305681558)
   i   0  xs  0   ys 0
   w   (abs (- (car sz) (nth 0 xyb)))
    )
    (repeat 4
        (setq  ri (nth i rr) vl (* (nth i vv) w)

[1] [2]  下一頁

,曲線線元繪制(LISP)函數

++《曲線線元繪制(LISP)函數》相關文章

贵州快3下载