;;;作者:XYY;;;时间:2026/6/1;;;坐标正反算主函数(defun C:zbzf(/ rec2p pol2r zfk pt1 pt2 pold polang polrad)(setq rec2p(lambda(x y)(list(sqrt(+(* x x)(* y y)))(angle'(0 0)(list x y))))pol2r(lambda(r a)(list(* r(cos a))(* r(sin a)))))(setq zfk(getstring"\n坐标正算或[坐标反算(P)]: ")pt1(cdr(reverse(getpoint(if(or(= zfk "P")(= zfk "p"))"\n指定第一点: ""\n指定基点: ")))))(princ(strcat"N="(rtos(car pt1)2 3)",E="(rtos(cadr pt1)2 3)))(if(or(= zfk "P")(= zfk "p"));;;坐标反算(progn(setq pt2(cdr(reverse(getpoint"\n指定第二点: ")))pold(apply'rec2p(mapcar'- pt2 pt1)))(princ(strcat"N="(rtos(car pt2)2 3)",E="(rtos(cadr pt2)2 3)))(princ(strcat"\n两点距离: "(rtos(car pold)2 4)"m, 方位角: "(D_ms(cadr pold)))));;;坐标正算(progn(setq polang(getreal"\n输入方位角(D.MS): ")polrad(getreal"\n输入长度(m): ")pt2(mapcar'+ pt1 (pol2r polrad(rad1 polang))))(princ(strcat"\n方向点坐标: N="(rtos(car pt2)2 3)",E="(rtos(cadr pt2)2 3)))))(entmake(list'(0 . "LINE")(cons 10(reverse pt1))(cons 11(reverse pt2))))(entmake(list'(0 . "TEXT")(cons 1 "P1")(cons 10(reverse pt1))(cons 40 2)))(entmake(list'(0 . "TEXT")(cons 1 "P2")(cons 10(reverse pt2))(cons 40 2)))(princ))(prompt"\n*** 输入命令\"ZBZF\"进行坐标计算. ***")
已关注
关注
重播 分享 赞
rad1:角度(D.ms)转为弧度,例(rad1 46.32185) 返回0.81225;
DMS字符,例(D_ms 0.81225) 返回“ 46d32'18.5\" ”。
夜雨聆风