找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1065|回复: 6

[LISP函数]:曲线任意里程中边桩坐标正反算(LISP)函数

[复制链接]

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-6-24 22:07:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
曲线任意里程中边桩坐标正反算(LISP)函数
;本文的两个函数是根据“曲线任意里程中边桩坐标正反算(CASIO FX—4800P计算器) '程序”
;移植而成
;一、约定
       ; (1) 以道路中线的前进方向(即里程增大的方向)区分左右;当线元往左偏时,
;线元偏向标志=-1;当线元往右偏时,线元偏向标志=1;当线元为直线时,线元偏向标志=0。
        ;(2) 当所求点位于中线时,边距=0;当位于中线左铡时,边距取负值;当位于中线中线右
;侧时,边距取正值。
       ;(3) 当线元为直线时,其起点、止点的曲率半径为无穷大,以10的45次代替。
        ;(4) 当线元为圆曲线时,无论其起点、止点与什么线元相接,其曲率半径均等于圆
;弧的半径。
         ;(5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45
;次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半
;径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。
        ;(6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的
;值;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径等
;于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
;二、功能
;可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点里程、起元点
;坐标、起点切线方位角、线元长度、起点曲率半径、止点曲率半径、线元偏向标志)及里程边距或
;坐标,对该曲线段范围内任意里程中边桩坐标进行正反算。
;三、源程序
;==============================================================================
;正算函数(由里程和边距计算坐标)
;入口参数线元要素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)
        ff (+ f0 (* q vl (+ c (* vl d))))
        xs (+ xs (* ri (cos ff)))
        ys (+ ys (* ri (sin ff)))
        i  (1+ i)
)
    )
    (setq f  (+ f0 (* q w (+ c (* w d))) (* 0.5 pi))
   xs (+ (nth 1 xyb) (* w xs) (* (last sz) (cos f)))
   ys (+ (nth 2 xyb) (* w ys) (* (last sz) (sin f)))
    )
    (list xs ys f)
)
;==============================================================================
;反算函数(由坐标计算里程和边距)
;入口参数线元要素xyb及sz为:
;xyb=(线元起点里程  线元起点X坐标  线元起点Y坐标  线元起点切线方位角(以弧度为单位)
; 线元长度    线元起点曲率半径  线元止点曲率半径   线元偏向标志)
;xpt=(要计算点的X坐标   要计算点的Y坐标)
;返回值=(所求点的中线里程  所求点距中线的边距)
(defun qxfs(xyb xpt / f0 q c d at w z fhz l)
   (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))
         at (- f0 (* 0.5 pi))
  w  (abs (- (* (- (cadr xpt) (nth 2 xyb)) (cos at))
      (* (- (car  xpt) (nth 1 xyb)) (sin at))
   )
     )
  z  1
   )
   (while (> (abs z) 1e-6)
       (setq fhz (qxzs xyb (list (+ w (car xyb)) z))
      l   (+ at (* q w (+ c (* w d))))
      z   (- (* (- (cadr xpt) (cadr fhz)) (cos l))
      (* (- (car  xpt) (car  fhz)) (sin l))
   )
      w   (+ w z)
       )
   )
   (setq fhz (qxzs xyb (list (+ w (car xyb)) 0))
  z   (/ (- (cadr xpt) (cadr fhz)) (sin (last fhz)))
   )
   (list (+ w (car xyb)) z)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-24 22:15:44 | 显示全部楼层
楼主好,对你的程序很感兴趣!但是不知怎么加载,可否说明一下?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-6-24 22:27:24 | 显示全部楼层
注意(程序编辑时有小错误):将下载的程序中的
rr ;(0.1739274226 0.3260725774 0.3260725774 0.1739274226)
   vv ;(0.0694318442 0.3300094782 0.6699905218 0.9305681558)
改为如下:
rr  '(0.1739274226 0.3260725774 0.3260725774 0.1739274226)
   vv  '(0.0694318442 0.3300094782 0.6699905218 0.9305681558)
并将文件存为“d:kszd.lsp“,在Auto CAD的菜单栏作如下操作:

工具(T)—>加载应用程序(L)—>在选择文件对话框中选“d:kszd.lsp”—>
加载(L)—>关闭(C)后可加载
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-24 23:01:09 | 显示全部楼层
楼主好,这段话“入口参数线元要素xyb及sz为:
;xyb=(线元起点里程 线元起点X坐标 线元起点Y坐标 线元起点切线方位角(以弧度为单位)
; 线元长度 线元起点曲率半径 线元止点曲率半径 线元偏向标志)
;xpt=(要计算点的X坐标 要计算点的Y坐标)
;返回值=(所求点的中线里程 所求点距中线的边距)
”怎么理解和操作!
程序改正后还是出现“命令: _appload 已成功加载 d:kszd.lsp。
命令: ; 错误: no function definition: LISP”这样的提示!不知何故?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-6-24 23:48:46 | 显示全部楼层
程序加载后,在命令行中键入
(qxzs  (list 806.748 19766.566 28594.574 2.101929446 112.779 221.75 221.75   -1)  (list 870 -5.0))
即可计算得里程为870 、边距为-5 的坐标X=19747.53609、   Y=28654.13091;
在命令行中键入
(qxfs  (list 806.748 19766.566 28594.574 2.101929446 112.779 221.75 221.75   -1)  (list 19747.536  28654.131)),即可计算得里程为870.0001137 、边距为-4.99941049。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-25 11:59:55 | 显示全部楼层
楼主好,以上的程序,能否共享你的FX480程序呢?给你了短信,不见回复!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-6-25 12:48:13 | 显示全部楼层
要共享CASIO fx-4800P计算器程序的请看:http://www.celiang.net/celiang/article_view.asp?id=380
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 08:10 , Processed in 0.381286 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表