空间前方交会程序使用说明
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
(defun c:spsec();空间前方交会主程序(Space Intersection) (setq out nil); “输出”变量初始值 (setq file1 (getstring "\n 输入数据文件名(*.txt):") f1 (open file1 "r")) (setq file2 (getstring "\n 输出数据文件名(*.txt):") f2 (open file2 "w")) (princ " 《空间前方交会目标点三维坐标》" f2);输出文件标题 (setq datum (read (read-line f1)));基准尺长度 (setq b0 (read (read-line f1)));两测站间基线近似长度 (setq h (read (read-line f1)));两测站间高差 (readline) (intersec) (setq x1 x y1 y z1 z);交会基准尺左端点坐标 (setq A1 A Za1 Za B1 B Zb1 Zb) (readline) (intersec) (setq x2 x y2 y z2 z);交会基准尺右端点坐标 (setq A2 A Za2 Za B2 B Zb2 Zb) (setq dx (- x1 x2) dy (- y1 y2) dz (- z1 z2)) (setq datum0 (sqrt (+ (* dx dx) (* dy dy))));基准尺观测长度 (setq R (/ datum datum0) b0 (* b0 R));长度比及基线精确长度 (princ "\n" f2) (princ "长度比=" f2) (princ (rtos R 2 6) f2);输出长度比 (princ "\n" f2) (princ "基线长=" f2) (princ (rtos b0 2 4) f2);输出基线长 (princ "\n" f2) (princ "(1)基准尺端点坐标及高程差:" f2) (setq out "y") ;需要屏幕显示及文件输出坐标, “输出”变量赋值 (command "layer" "m" "datum2" "c" 1 "" "");基准尺端点图层 (setq A A1 Za Za1 B B1 Zb Zb1) (intersec);计算基线改正后基准尺端点坐标 (setq x11 x y11 y z11 z) (setq P11 (list x11 y11 z11)) (setq A A2 Za Za2 B B2 Zb Zb2) (intersec) (setq x22 x y22 y z22 z) (setq P22 (list x22 y22 z22)) (command "pdmode" 34 "pdsize" 0.03 "a" "");设置点的形式和大小 (command "point" P11 "point" P22 "" "");展绘基准尺端点 (command "text" P11 0.05 0 "P1" "") (command "text" P22 0.05 0 "P2" "") (command "layer" "m" "station" "c" 2 "" "");测站点图层 (setq PA (list 0 0 0) PB (list B0 0 h)) (command "point" PA "point" PB "");展绘测站点 (command "text" PA 0.05 0 "A" "") (command "text" PB 0.05 0 "B" "") (command "layer" "m" "aim" "c" 4 "" "");目标点图层 (princ "\n" f2) (princ "(2)目标点坐标及高程差:" f2) (setq m (read (read-line f1)));读取交会目标点数 (repeat m (readline) (intersec);循环读取目标点交会角和进行坐标计算,展绘点位 ); end repeat (command "zoom" "e" "") (princ) );end (Program for Spaec Intersection)
i , i (i 1,2) 与天顶距 Z i ( A) , Z i ( B ) (i 1,2) ,以及 AB 间的天顶距(AB 的高差 h 未
知时) ,计算基线 AB 的长度 b,然后由 A、B 两点对各空间目标进行交会定点。
Z P1
Y
L
P2
Z2 Z1
P1
Z1
Z2
P2
A
α 1 α2 b β 1 B β 2 h
3
; 《空间前方交会计算程序》 ; Space Intersection (defun angtorad(/ A B C D E); “角度值由度.分秒化为弧度”子程序 (setq dms (atof ang));角度值子字符串转换为实数 (setq A (fix dms));整度数 (setq B (* (- dms A) 100));分数 (setq C (fix B));整分数 (setq D (* (- B C) 100));秒数 (setq E (+ A (/ C 60.0) (/ D 3600))); “度.分秒”化为以度为单位 (setq hu (* (/ E 180) PI));度为单位化为弧度 ); endsub (Angle to Radian) (defun intersec(/ C D z1 z2 P p1 p2 p3); “前方交会”子程序 (setq C (+ A B) D (* b0 (/ (sin B) (sin C)))) (setq x (* D (cos A)) y (* D (sin A)));计算目标点平面坐标 (setq z1 (* D (/ (cos Za) (sin Za))));从两个测站计算目标点高程 (setq z2 (+ (* D (/ (sin A) (sin B) (/ (sin Zb) (cos Zb)))) h)) (setq z (/ (+ z1 z2) 2) dz (- z1 z2));计算平均高程及高程差(检核) (if (= out "y") (progn ;在屏幕展绘点位和注记坐标以及输出于文件 (setq P (list x y z)) (command "point" P "" "");展绘点位 (setq p1 (list (+ x 0.03) (- y 0.05) z)) (setq p2 (list (+ x 0.03) (- y 0.10) z)) (setq p3 (list (+ x 0.03) (- y 0.15) z)) (command "text" p1 0.04 0 (rtos x 2 4) "");注记点的坐标 (command "text" p2 0.04 0 (rtos y 2 4) "") (command "text" p3 0.04 0 (rtos z 2 4) "") (princ "\n" f2) (princ " x=" f2) (Princ (rtos x 2 5) f2);文件输出目标点坐标及高程差 (princ " y=" f2) (princ (rtos y 2 5) f2) (princ " z=" f2) (princ (rtos z 2 5) f2) (princ " dz=" f2) (princ dz f2) )); endprogn endif ); endsub (Intersection) (defun readline(/ line); “从一行中分段读取两测站方向值和天顶距并化为弧度”子程序 (setq line (read-line f1)) (setq ang (substr line 1 12)) (angtorad) (setq A hu);A 站方向值 (setq ang (substr line 13 12)) (angtorad) (setq Za hu);A 站天顶距 (setq ang (substr line 25 12)) (angtorad) (setq B hu);B 站方向值 (setq ang (substr line 37 12)) (angtorad) (setq Zb hu);B 站天顶距 ); endsub (Read a Line)
DA b sin i sin( i i )
sin i DB b sin( i i ) xi DA cos i yi DA sin i zi ( A) DA tan Z i ( A) zi ( B ) DB tan Z i ( B ) h
2
(8)ຫໍສະໝຸດ Baidu
(9)
(10)
(三)空间前方交会计算 LISP 程序设计
根据空间前方交会计算的特点: (1)从两个测站向目标点观测水平角和天顶 距的前方交会计算需要多次进行; (2)每个角度的“度.分秒”记录数值都需要 化为弧度单位才能在 LISP 程序中运算; (3) 读取文件中的每一行角度观测值 (水 平角和天顶距)均以字符形式记录,需要分段区分并作数据的类型转换。以上 3 项计算需要编写成子程序, 才符合程序设计的简洁和灵活的原则。空间前方交会 计算 LISP 程序的设计框图如图 6.2 所示。 主程序名为 SPSEC (Space Intersection) 。 子程序 ANGTORAD(Angle to Radian)用于角度化为弧度(角度的记录形式为: “度.分秒” , 因 此 在 LISP 语 言 中 没 有 现 成 的 函 数 ) ; 子 程 序 INTERSEC (Intersection)用于前方交会;子程序 READLINE(Read a Line)用于从记录文 件中读取一行数据, 区分各个观测角度, 并再调用子程序 ANGTORAD 化为弧度。
B
X
图1
空间前方交会原理
(二)空间前方交会计算公式
1.基线尺端点的三维坐标计算 若 A、B 两点基线的近似长度为 b0 ,则根据图 1 的几何关系,可导得由 A 点计算 Pi 点三维坐标的公式为
1
xi b0 yi b0
cos i sin i sin( i i ) sin i sin i sin( i i ) sin i cot Z i ( A) sin( i i )
主程序
SPSEC
空间前方交会
子程序
READLINE
读入一行数据
子程序
ANGTORAD
角度化为弧度
子程序
INTERSEC
前方交会
图 2 空间前方交会程序设计框图 程序中的全局变量为: datum, datum0 — 基准尺长度及其近似值; b0 — 基线长度及其近似值; h — 两测站的高差; A, B — 交会水平角; Za, Zb — 交会天顶距; x, y, z — 交会点坐标; A1, B1, Za1, Zb1 — 基准尺左端点交会水平角和天顶距; A2, B2, Zb1, Zb2 — 基准尺右端点交会水平角和天顶距; R — 基准尺长度与其近似值的比值; dx, dy, dz — 基准尺两端点近似坐标的坐标差; P11, x11, y11, z11 — 基准尺左端点的点位和坐标; P22, x22, y22, z22 — 基准尺右端点的点位和坐标; PA, PB — 两测站点的点位。 子程序中的局部变量如各个子程序开首括弧内所示。以下为“空间前方交会 计算程序”全文:
空间前方交会程序使用说明
(一)空间前方交会原理
用空间前方交会法测定空间点的三维坐标常用于高精度的工业测量, 例如控 制装配、整机安装、轴线校正等,这些测量工作往往要求在现场快速给出大量观 测点的计算结果。空间前方交会的原理如图 1 所示,A、B 为安置两台精密工业 测量经纬仪(或全站仪)的测站中心点,P1、P2 为长度 L 的基准尺的两个端点。 以 A 为原点,其天顶方向为 Z 轴,AB 的水平方向 AB′为 X 轴,建立右手独立坐 标 系 A-XYZ ;首 先 在 测站 A 、 B 点分 别 观测基准 尺 两端 P1 、 P2 点水平 角
(1)
zi ( A) b0
从 B 点计算 Pi 点的 z 坐标的公式为
zi ( B ) b0 sin i cot Z i ( B ) sin( i i ) h
(2)
从 A、B 点测定 Pi 点的 z 坐标之差及其平均值为:
z i z i ( A ) z i ( B ) zi 1 ( zi ( A ) zi ( B ) ) 2
(3) (4)
2.两台全站仪间的高差计算 两台全站仪横轴之间的高差 h 可以用瞄准大致在水平方向的同一个目标, 分 别用三角高程测量的方法测定其高差,按两台仪器测得高差之差计算 h。 3.测站中心点间的基线长度计算 由基准尺的两个端点 P1、P2 的坐标可求得计算基准尺的计算长度为:
L0 ( x1 x2 ) 2 ( y1 y2 ) 2 ( z1 z2 ) 2
(5)
如果基准尺水平安置,则可用下式计算;
L0 ( x1 x2 ) 2 ( y1 y2 ) 2
(6)
因基准尺精确长度 L 已知,可按下式计算基线精确长度,
b b0 L L0
(7)
4.目标点三维坐标计算 求得了基线的精确长度 b,可交会计算任何目标点的三维坐标,为了便于计 算器的程序编制,计算公式(1) 、 (2)进行改写如下: