明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1156|回复: 1

[提问] 菜鸟求教 关于道路标高计算的程序 应该如何写?

[复制链接]
发表于 2013-11-4 20:23:21 | 显示全部楼层 |阅读模式
     已知A点标高 长度 坡度 求B点标高
     
     通过点 A点标高 长度 坡度 然后计算出B点标高   

      这样的程序 应该如何写呢?

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-6-19 13:10:05 | 显示全部楼层
;;;=================================================================*
;;;      通用函数                                                   *
;;;功能:标注坡度                                                   *
;;;参数:pt0 -----第一点                                            *
;;;      pt1 -----第二点                                            *
;;;      ty  -----标注形式。1为比值形式;2为百分比形式。            *
;;;返回:如果参数正确绘制完毕返回T;否则返回nil。                   *
(defun zl-pd-draw (pt0 pt1 zxbl hxbl  ty /      ANG    DIST   DIST_TEXT n
     NUM   PT  SIZE_TEXT     STR    TMP    XX
     YY
    )
(setq n (getreal "\n请输入文字高:"))
    (setq size_text n ;_字高
   dist_text (/ n 5);_文字脱机距离
    )
    (if (< (car pt0) (car pt1))

(setq tmp pt0
       pt0 pt1
       pt1 tmp
)
    )
    ;;计算文字标注位置
    (setq dist (distance pt0 pt1)
   ang  (angle   pt0 pt1)
    )
    (setq pt (polar pt0 ang (* 0.5 dist))
   pt (polar pt (+ ang (* 0.5 pi)) dist_text)
    )
    ;;计算标注内容
    (setq xx (*(- (car pt1) (car pt0)) (/ hxbl 1000.0000))
   yy (*(- (cadr pt1) (cadr pt0))  (/ zxbl 1000.0000)  )
    )
    (cond ((= ty 1)
    (if (equal yy 0.0 1e-10)
        (setq str "1:9999")
        (setq num (/ xx 1.0 yy)
       str (rtos (abs num) 2 2)
       str (strcat "1:" str)
        )
    )
   )
   ((= ty 2)
    (if (equal xx 0.0 1e-10)
        (setq str "9999%")
        (setq num (/ yy 1.0 xx)
       str (rtos (* 100 num) 2 2)
       str (strcat str "%")
        )
    )
   )
   (t (setq str nil))
    )
    ;;写文字
    (if str
(PROGN (COMMAND "_.TEXT"
   "j"
   "bc"
   "non"
   pt
   ;size_text
   (+(* (/ ang pi) 180)180)
   str
        )
        T
)
nil
    )
)

;;;=================================================================*
;;;功能:点取两点,标注坡度                                         *
;;;日期:sahe 于 2009-09-22                                        *
(defun c:pd0 (/ pt0 pt1 zxbl hxbl)
    (princ "功能:点取两点,标注坡度。")
  (setq hxbl (getint "\n请输入断面横向比例 1 :"))
  (setq zxbl (getint "\n请输入断面纵向比例 1 :"))
    (if (and (setq pt0 (getpoint "\n点取第一点: "))
      (setq pt1 (getpoint pt0 "\n点取第二点: "))
)
(zl-pd-draw pt0 pt1 zxbl hxbl 2)
    )
    (princ)
)


;;;=================================================================*
;;;功能:选取line,标注坡度(比值形式)                             *
;;;日期:sahe 于 2009-09-22                                        *
(defun c:pd1 (/      ANG    DIST   DIST_TEXT  ENT I      NUM
       PT     PT10   PT11   SIZE_TEXT  SS STR    TMP
       XX     YY
      )
    (princ "\n功能:标注坡度(比值形式)")
    (setq i 0)
   (setq hxbl (getint "\n请输入断面横向比例 1 :"))
  (setq zxbl (getint "\n请输入断面纵向比例 1 :"))
    (princ "\n选取直线对像... ")
    (if (setq ss (ssget '((0 . "line"))))
(repeat (sslength ss)
     (setq ent  (entget (ssname ss i))
    pt10 (cdr (assoc 10 ent))
    pt11 (cdr (assoc 11 ent))
    ;pt10 (trans pt10 0 1) ;_转换为用户坐标系下
    ;pt11 (trans pt11 0 1)
     )
     (zl-pd-draw pt10 pt11 zxbl hxbl 1)
     (setq i (1+ i))
)
    )
    (princ)
)

;;;功能:指定坡度、坡长,绘制之。
(defun c:pd2 (/ PT0 PT1 TMP)
    ;;设置全局变量
    (or i_old
(setq i_old 0.0)
    )
    (or l_old
(setq l_old 100.0)
    )
    ;;
    (princ "\n1.请输入坡度值(%)<")
    (princ i_old)
    (if (setq tmp (getreal ">: "))
(setq i_old tmp)
    )
    ;;
    (princ "\n2.请输入坡长值<")
    (princ l_old)
    (if (setq tmp (getdist ">: "))
(setq l_old tmp)
    )
    ;;绘制
    (setq pt0 (getvar "VIEWCTR")
   pt1 (list (+ (car pt0) l_old)
      (+ (cadr pt0) (* i_old 0.01 l_old))
       )
    )
    (command "_.line" "non" pt0 "non" pt1 "")
    ;;移动
    (command "_.move" (entlast) "" "non" pt0)
    (princ)
)



参考看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 06:51 , Processed in 0.206977 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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