1 前言
我们在画地质剖面图时,经常要画断层。我所见的大部分同仁都是利用计算器或Excel电子表格程序计算其视倾角,缺点是不能判断出断层的倾向与剖面方向的关系。而我们在判断断层倾向与剖面方向的关系时,有时候容易犯简单的、想当然的错误。为了快速、准确地在剖面图中画断层,本人特编辑出此程序供大家分享。它是直接在AutoCAD中,不借助于其它程序,只需用短短的几秒钟就能完成计算断层的视倾角,判断出断层倾向与剖面方向的关系,并画出其剖面示意线,标出断层的编号和产状。
2 源程序代码
(defun c:yfapm (/ anga angb fanu angc pt ptt pt1 pt2 pt3 os qx ak bk e f d g yy fa)
(setvar "cmdecho" 0)
  (setq anga (getreal "n请输入剖面方向(度): "))
  (setq fanu (getstring "n请输入断层编号: "))
  (setq angb (getreal "n请输入断层走向(度): "))
  (setq qx (strcase (getstring "n请输入断层倾向(NE、NW、SE、SW、N、E、S、W): ")))
  (setq angc (getreal "n请输入断层倾角(度): "))
  (setq yxblf yxbl)
  (if (null yxblf) (setq yxblf 1000))
  (princ "n请输入X方向的比例< ") (princ yxblf) (princ " >: ")
  (setq yxbl (getreal ))
  (if (null yxbl) (setq yxbl yxblf))
  (setq yyblf yybl)
  (if (null yyblf) (setq yyblf 1000))
  (princ "n请输入Y方向的比例< ") (princ yyblf) (princ " >: ")
  (setq yybl (getreal ))
  (if (null yybl) (setq yybl yyblf))
  (setq pt (getpoint "n请指定断层通过点: "))
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ak (tan (- 90 anga)))
  (setq bk (tan (- 90 angb)))
  (setq e  (atan (abs (/ (- ak bk) (1+ (* ak bk))))))
  (setq f (angtos (atan (* (abs (sin e)) (tan angc) (/ yxbl yybl))) 0 10))
  (cond
    ((= qx "NW") (setq d (+ angb 270)))
    ((= qx "SE") (setq d (+ angb 90)))
    ((= qx "NE") (setq d (- angb 270)))
    ((= qx "SW") (setq d (- angb 90)))
    ((= qx "N")  (setq d 0))
    ((= qx "E")  (setq d 90))
    ((= qx "S")  (setq d 180))
    ((= qx "W")  (setq d 270))
    )
  (setq g (abs (- d anga)))
  (if (and (> g 90)(< g 270))
    (setq yy "相反")
    (setq yy "一致" ))
  (if (or (= g 90)(= g 270))
    (setq yy "平行"))
  (if (= yy "相反")
    (setq pt1 (polar pt (+ (angtof  f) pi) 100))
    (setq pt1 (polar pt (+ (- pi (angtof  f)) pi) 100)))
  (setq pt2 (polar pt1 (/ (* pi 7) 4) 5))
  (setq pt3 (polar pt2 0 31))
  (setq ptt (polar (polar pt2 0 1) (/ pi 2) 1))
  (setq fa (strcat fanu ":" (rtos angb) "%%d" qx "∠" (rtos angc) "%%d" ))
  (command "pline" pt "w" 0.3 0.3 pt1 "w" 0 0 "" "")
  (command "pline" pt1 pt2 pt3  "" "")
  (command "text" ptt 2.5 0 fa "" "")
  (princ "视倾角")(princ f)(princ "度")
  (princ ",断层倾向与剖面方向")(princ yy)
  (setvar "osmode" os)
 (prin1)
  )
 (defun tan (ang / nn n nabc)
  (setq ang (/ (* ang pi) 180))
  (setq ang (/ (sin ang) (cos ang)))
  )
3 举例
加载该程序,根据AutoCAD窗口下面命令行的提示输入相应的数据,即可瞬间画出断层剖面示意线,并以单项文本的形式写出断层的编号和产状,并且在文本窗口中列出断层在该剖面图中的视倾角,以及断层倾向与剖面方向的关系。比如剖面方向为30°,断层编号是f20,产状为45°NW∠60°(注意产状的书写方式),X方向的比例为“1:1000”,Y方向的比例为“1:500”。
(1)输入命令“yfapm”后,回车;
(2)输入剖面方向“30”(单位为度),回车;
(3)输入断层编号“f20” ,回车;
(4)输入断层走向“45”(单位为度),回车;
(5)输入断层的倾向“nw”(大小写都行,程序自动转为大写),回车;
(6)输入断层的倾角“60”(单位为度),回车;
(7)输入剖面图在X方向上比例的分母,回车。如比例为“1:1000”,则输入“1000”。首次默认为“1000”,并且该变量具有记忆功能(即直接回车,则该变量数值为上一次输入的数值);
(8)输入剖面图在Y方向上比例的分母“500”,回车。用法同上;
(9)在图上指定一点,该点为断层通过的某一点,一般点在剖面图的地形线上。