曲线线元绘制(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)
,曲线线元绘制(LISP)函数
曲线线元绘制(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)
,曲线线元绘制(LISP)函数
下一篇:LISP快速展点程序
++《曲线线元绘制(LISP)函数》相关文章
- › 曲线线元绘制(LISP)函数
- 在百度中搜索相关文章:曲线线元绘制(LISP)函数
- tag: 暂无联系方式, 工程测量,工程测量规范,工程测量技术,工程资料 - 工程测量