关于坐标计算内核
1、程序采用数据保存在扩充存储的方式,更换或补充数据不用修改程序。
2、线路采用线路号来区分,程序内部和使用时都用自然里程参加计算。
3、平曲线不用区分匝道和主线,所有平曲线都转化成交点资料,此交点可以缓和曲线不对称、不完整,主线通常由交点起算、匝道均由曲线起点起算。每条平曲线交点格式为9个数据。
4、直线、圆曲线、缓和曲线分别用数学模型不同的计算子程序,保证了计算速度。直线、圆曲线子程序为精确公式,缓和曲线计算子程序为原创的复化段数可调的复化高斯2节点公式,计算精度可自由控制。(现暂改为固定4次复化)
数据库编制规则
基本规则:圆曲线半径右转为正,坡度上坡为正,角度单位为度,边桩转角右转为正,线路号为非负整数,数据库中的直圆里程应该在起点和缓圆各输入一个互差0.0001的里程。圆直点同样处理。
一、目录部分:
格式为:
起点里程、终点里程、平曲线资料起始位置、竖曲线资料起始位置、坡度资料起始位置
起点里程、终点里程、平曲线资料起始位置、竖曲线资料起始位置、坡度资料起始位置
……
各条线路依次连续排列。
二、平曲线部分:
格式为:
圆半径
起点里程、缓圆里程、圆缓里程、终点里程、切线长、交点X、交点Y、切线方位角、圆半径
起点里程、缓圆里程、圆缓里程、终点里程、切线长、交点X、交点Y、切线方位角、圆半径
……
终点里程、圆半径
各交点依次连续排列。
主线按图纸设计数据整理,匝道的线元数据组合成交点组合时,每条曲线由直线、缓和曲线、圆曲线、缓和曲线、直线组成,对不完整缓曲要对数据进行简单处理,不完整缓曲可以划归任一侧,不完整缓曲所在的起(终)点里程改为负,交点坐标输入为起点坐标,切线长输入0即可。
三、竖曲线部分:
格式为:
前坡度、变坡点里程、变坡点高程、竖曲线半径
前坡度、变坡点里程、变坡点高程、竖曲线半径
……
后坡度、(0)
各竖曲线依次连续排列。
注意本程序计算单位为直坡+竖曲线,如线路最后为直坡,必须在最后一个变坡点里程位置填一个0,最后无直坡段可不加0
C-测量程序使用说明
运行C程序
XL0-??选线路号
JX?输入仪器X、JY?输入仪器Y
0-END 1-ZS 1-F?选1正算,选2反算,选0退出
一、正算计算流程
显示起点里程、终点里程
①K?输入K中桩里程,输出中桩坐标、高、放样数据
②L?输入相对中桩或上点偏距,按EXE输入0到①
F?输入相对线路前进方向右角,输出坐标、放样数据,到②
如正算里程输入超出范围重新选正反算时执行反算,则反算刚计算的正算角桩坐标
二、反算计算流程
①X?Y?输入测点坐标,显示起点里程、终点里程K?输入近似里程(默认是线路中心里程)
②输出里程、外移距、中桩高到①
反算过程中随时显示里程逼近误差
计算过程中右下角显示的数字为缓曲计算时复化高斯公式分段数。
正反算计算过程输入里程或任何时候中间结果里程超出对应线路里程会回到程序起点!!****************************************************************************************************
C-测量主程序
Do:Deg:Norm 1:Cls:”XL 0-?”?H: //输入线路号
“JX”?V:”JY”?W:”0-END 1-Z 2-F”?U:Fix 3://输入置仪坐标,正反算选项
While U=1:Prog “Z”:WhileEnd//循环正算流程(除非里程超限)
While U=2:Prog “F”:WhileEnd//循环反算流程(除非里程超限)
LpWhile U≠0:Cls:”END”//里程超限时返回程序起点,选项为0则退出程序
D-读
Z[G]→L:Z[G+1]→M:Z[G+2]→N:Z[G+3]→O:Z[G+4]→P//从Z[G]起读5个扩充存储到L、M、N、O、P
F-三维反算
X→V:Y→W:”X”?V:”X”?W:1.5→U: //输入测点坐标
Prog “K”:U=3=>Return:2→U://近似里程,里程超限则退出
Do:Prog “P”:V-X→I:W-Y→J:I=0=>0.0001→I:Pol(I,J): //求到假定点斜距及方位角
J-O→J:Rec(I,J):K+I→K://得出偏距和修正后里程
Prog “K”:U=3=>Return:LpWhile Abs(I)>1m//里程超限则退出、修正值大于1mm则重新试算
Prog “W”:Prog “S”:Prog “Y”//计算里程、位置、求中桩高程
G直线计算
X+Lcos(O→X:Y+Lsin(O→Y//计算直线段坐标
H缓和曲线计算
L(P-B)÷2÷D→D://求测点到起点曲率变化
D÷8→M:L÷8→L:1÷√(3→R:O→A://求拆分后各段曲率差、曲线长、高斯2节点系数
For 1→C To 7 Step 2://循环4次
A+Lr(C+R)(M(C+R)+B→O:Prog”G”://计算每段的第一部分
A+Lr(C-R)(M(C-R)+B→O:Prog”G”:Next://计算每段的第二部分
A+8Lr(D+B→O//求测点方位角
I圆曲线计算
LPr÷2→A:2÷P*sin(A)→L:O+A→O:Prog “G”:O+A→O//用弦切角公式计算圆曲线坐标
K里程判断
5H+2→G:Prog “D”:U=1.5=>(L+M)÷2→K:N→G:O→Z://提取平、纵、横坡要素要素指针
If Int(U)=1:Then Cls:”QD=”:”ZD=”:Locate 4,1,L:Locate 4,2,M:?K:IfEnd://提示起终点里程
Abs(2K-L-M)>M-L=>3→U//里程超限令正反算选项为3
P-平面
While K>Z[G+9]:G+9→G:WhileEnd://查询符合要求的交点
G+4→G:Prog “D”:-L→L:M→X:N→Y:Prog “G”:1÷P→P://读取切线长、交点坐标、方位角、半径
G-5→G:Z[G+1]→Q:K-Abs Q→L://读取起点里程、求测点到起点长
If L≤0:Then Prog “G”:Return:IfEnd://小于起点计算直线坐标,并退出子程序
0→B:Q<0=>1÷Z[G]→B://计算起终点曲率,起点里程小于0起点曲率为上交点半径倒数
Abs(Q→D:Z[G+2]→Q:Q-D→D://读取缓圆里程、求第一缓曲全长
If L≤D:Then Prog “H”:Return:IfEnd://如果测点到起点长小于缓一长计算缓曲坐标,并退出子程序
D→L:Prog “H”:K-Q→L://令计算长等于缓曲长计算缓圆坐标、求测点到缓圆长
Q→D:Z[G+3]→Q:Q-D→D://求圆曲全长,读取圆缓里程
If L≤D:Then Prog “I”:Return:IfEnd://如果测点到缓圆长小于圆曲长计算圆曲坐标,并退出子程序
D→L:Prog “I”:K-Q→L://令计算长等于圆曲长计算圆缓坐标、求测点到圆缓长
Q→D:Z[G+4]→Q:Abs(Q)-D→D://求第二缓曲全长,读取缓直里程
P→B:0→P:Q<0=>1÷Z[G+18]→P:-Q=Z[G+10]=>1÷Z[G+11]→P//缓二起终点曲率
If L≤D:Then Prog “H”:Return:IfEnd://如测点到圆缓小于缓二全长计算缓曲坐标,并退出子程序
D→L:Prog “H”:K-Abs(Q→L://令计算长等于缓二长计算缓直坐标,求测点到缓直长
Prog “G”//计算第二直线坐标
S-竖曲线
Z→G:G=0=>Return://读取竖曲线指针
Do:Prog “D”:P-L→D:Oabs(D)÷D→R://读前坡、变坡里程、变坡高、半径、后坡,算坡差、半径凹凸
RD÷2→T:G+4→G://计算切线长,完成竖曲要素准备
LpWhile K>M+T And Z[G+1]≠0://里程大于本竖曲终点且下一变坡里程不为0读下一曲线
K-M→M:N+LM→Z:M+T→M://计算测点到变坡里程长,计算前坡高,求测点到竖曲起点长
If M>0:Then Z+M2÷2÷R→Z:L+MD÷2÷T→L:IfEnd://测点在竖曲范围,计算竖曲线高、测点坡度
M-T→M:IF M>T:Then N+PM→Z:P→L:IfEnd//里程大于竖曲线终点,计算后坡高,后坡坡度
V-放样距离角度
Cls:”L=”:”<=”:Pol(X-V,Y-W:Locate 3,1,I://计算并显示放样距离
J<0=>J+360→J:J►DMS▲//显示放样方位角
W-位置显示
Cls:Fix 3:”K=”:”J=”:Locate 3,1,K:Locate 3,2,J//显示里程、偏移值
X-显示坐标
Cls:”X=”:”Y=”:Locate 3,1,X:Locate 3,2,Y:360Frac((360+O)/360►DMS▲//显示坐标,方位角
Y-高程显示
Locate 1,4,”Z=”:Locate 3,4,Z▲//显示高程
Z-正算
Prog “K”:U=3=>Return://输入里程,里程超限则退出
Prog “P”:Prog “X”//显示中桩坐标,
Prog “S”:Prog “Y”:Prog “V”://有竖曲数据库时算中桩高,否则中桩高0,显示放样数据
0→L:?L:While L≠0:90→F:?F:O+F→O:Prog “G”://外移值不为0时依次计算角桩
Prog “X”:Prog “V”:0→L:?L:WhileEnd//显示角桩坐标,显示放样数据