;;-------------------------------------------- ;;计算两点间的方位角程序并插入cad 命令fwj ;;输出方位角fwj距离s ;;-------------------------------------------- (defun C:fwj() (graphscr) (setq oce (getvar "cmdecho")) (setvar "cmdecho" 0) ;关闭命令回显 (setq len 0) (setq A (getpoint " \n确定图上的第一点A: ")) ;取得第1点坐标 (setq B (getpoint " \n确定图上的第二点B: ")) ;取得第2点坐标 (setq DX (- (nth 1 B) (nth 1 A)) DY (- (nth 0 B) (nth 0 A)));取得AB的yx坐标差值 (setq Delt_Y (abs DY) Delt_X (abs DX)) ;取得xy坐标差值绝对值 (setq s (sqrt (+ (expt Delt_X 2) (expt Delt_Y 2)))) ;取得两点间距离 (setq θ (atan Delt_Y Delt_X)) ;求夹角以弧度为单位 (if (>= DY len) ;判断在哪个象限 (cond ((> DX len) (setq α θ) ;在1象限 (setq α (angtos α 1 4)) ;将α变成角度以下同 (setq fwj (strcat "NE" α)) ;前加NE ) (t (setq α (- pi θ)) ;在2象限 (setq α (angtos α 1 4)) (setq fwj (strcat "SE" α)) ;前加SE ) )):end if (if (< DY len) (cond ((> DX len) (setq α (- (* pi 2) θ)) ;在4象限 (setq α (angtos α 1 4)) (setq fwj (strcat "NW" α)) ;前加NW ) (t (setq α (+ pi θ)) ;在3象限 (setq α (angtos α 1 4)) (setq fwj (strcat "SW" α)) ;前加SW ) )):end if ;以下为转换度数的算法 (setq mn (strlen fwj)) (setq node 1) (setq zdfwj fwj) (repeat mn (if (= (substr fwj node 1) "d") (progn (if (= (substr fwj (- node 1)) "%") (progn (setq zdfwj fwj) ) ) (if (/= (substr fwj (- node 1)) "%") (progn (setq zdfwj (strcat (substr fwj 1 (- node 1)) "%%d" (substr fwj (+ node 1) (- mn node)))) ) ) ) ) (setq node (+ node 1)) ) (setq fwj zdfwj) ;转换结束 (prompt "\n请选标注文字的位置") (setq bz_point (getpoint)) ;获取插入点 (command "text" bz_point 3.0 0 fwj "") ;写在屏幕上方位角 (princ "\n")(princ "A=>B的坐标方位角α=")(princ fwj) (princ "\n")(princ "A=>B的距离S=")(princ S) (setvar "cmdecho" oce) (princ) ) ;endfwj |