欢迎来到http://www.gong66.com !
当前位置:六六工程资料网建筑课堂工程资料工程测量曲线线元绘制(LISP)函数

曲线线元绘制(LISP)函数

08-22 13:45:33  浏览次数:839次  栏目:工程测量
标签:工程测量规范,工程测量技术, 曲线线元绘制(LISP)函数,http://www.gong66.com
曲线线元绘制(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)函数》相关文章