浏览:次 2019-01-24 09:44
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)在图上指定一点,该点为断层通过的某一点,一般点在剖面图的地形线上。