Norm 1
Z[C+23]→N 当前分段要素N坐标
Z[C+24]→E 当前分段要素E坐标
Z[C+25]→M 当前分段要素起点桩号
Z[C+26]→H 当前分段要素起点方位角(正北)单位:弧度
Z[C+27]→A 当前分段要素起点曲率有左偏负右偏正(注意不半径)
Z[C+28]→R 当前分段要素终点曲率有左偏负右偏正(注意不半径)
Z[C+29]→L 当前分段要素长度
Z[C+3]→W
Z[C+32]→I:"DAT1 2 3"?I:I→Z[C+32] 平曲线要素数库类型选择1为内置式,2文件式,3实时输入(查看当前要素值)
0→I
Z[C+4]→I:"1 2 3"?I:I→Z[C+4] 选择本程序模式默认为坐标正算,1坐标反算,2横向边仰坡放样,3,纵向边仰坡放样(隧道进出口用到)
Lbi 1
Z[C+4]→I
I=1=>Prog"TURNZH"
I=2=>Prog"HXBYP"
I=3=>Prog"ZXBYP"
Lbi A
Deg:Norm 1:Cls
Z[C+1]→G:"ZH"?G:G→Z[C+1] ;G桩求桩号
Z[C+2]→B:"JL"?B:B→Z[C+2] ;B横向距离,左正右负
Lbi B
Prog "ZBJS" ;坐标正算
Prog "GCJS" ;高程计算
Fix 3:Cls ;设置三位小数
"ZH=":Locate 4,1,G ;第一行显示桩号
"X=":Locate 3,2,X ;第二行显示X(N)坐标
"Y=":Locate 3,3,Y ;第三行显示Y(E)坐标
Prog "GCJS" ;高程计算
"Z":Locate 2,4,Z+Z[C+41] ;第四行显示Z坐标
Locate 10,4,Z[C+2] ;第四行显示横向距离
0→I
Do:I+1→I:I=1000=>Goto 1:LpWhile Not(Getkey=57 Or Getkey=27) ;锁定键盘,并在几十秒后自动返回
Getkey=57=> Goto 1
Z+Z[C+41]+Z[C+49]-Z[C+44]-Z[C+45]→Z[C+48]
Pol(Z[C+35]-X,Z[C+36]-Y)
Cls:"DL":Locate 3,1,I:Locate 12,1,Z[C+45]
"DH":Locate 3,2,Z[C+48]:Locate 12,2,Z[C+49]
"FWJ"
J<0=J+360→J:J◤DMS◢
J→Z[C+46]
I→Z[C+47]
Goto 1
FileName:ZBJS 坐标计算程序
Prog"READDAT"
Rad
G-M→Q
IF AR=0 :Then If A=R :Then 1→J:Else 3→J :IfEnd:Else If A=R :Then 2→J:Else 3→J:IfEnd:IfEnd
If J=1 :Then H→F:N+QCos(H)→X:E+QSin(H)→Y:IfEnd 直线段直接计算
If J=2 :Then H+QR→F:Rec(Abs(2Sin(Abs(0.5QR))÷R),H+QR÷2):N+I→X:E+J→Y:IfEnd 圆弧段直接计算
If J=3 :Then Goto 5 :IfEnd
X+BCos(F+W)→X
Y+BSin(F+W)→Y
Deg:Return
Lbi 5 用五点通用坐标计算计算缓和段
0.5(R-A)÷L→K
AQ→I
KQ2→J
0.0469100770→P:H+IP+JP2→U
0.2307653449→P:H+IP+JP2→V
0.5→P :H+IP+JP2→D
0.7692346551→P:H+IP+JP2→F
0.9530899230→P:H+IP+JP2→T
0.1184634425→I
0.2393143352→J
0.2844444444→O
N+Q(ICos(U)+JCos(V)+OCos(D)+JCos(F)+ICos(T))→X
E+Q(ISin(U)+JSin(V)+OSin(D)+JSin(F)+ISin(T))→Y
H+AQ+KQ2→F
X+BCos(F+W)→X
Y+BSin(F+W)→Y
Deg:Return
FileName:TURNZH(坐标反算)
Norm 1
Z[C+37]→I:"DQD-N"?I:I→Z[C+37] 输入待求点N坐标
I=-1=>Prog"INFWJDLDH"
Z[C+38]→I:"DQD-E"?I:I→Z[C+38] 输入待求点E坐标
0→B:M+L÷2→G:Prog"ZBJS"
Lbi S:Rad
Z[C+37]-X→I:Z[C+38]-Y→J
If I=0 And J=0 :Then Goto A:IfEnd
Pol(I,J)
Lbi A:Rec(I,J-F):J→Z[C+2]
G+I→G:IF Abs(I)>0.0001 :Then Prog"ZBJS":Goto S↙
G→Z[C+1]
FileName:INFWJDLDH 实测坐标(用方位角,距离,高差)输入程序
Deg:Norm 1:Cls
Z[C+46]→J:"DQD-FWJ"?J:J→Z[C+46]
Z[C+47]→I:"DQD-DL"?I:I→Z[C+47]
Z[C+48]→K:"DQD-DZ"?K:K→Z[C+48]
Z[C+49]→P:"RHT"?P:P→Z[C+49]
Rec(I,J)
Z[C+35]+I→Z[C+37]
Z[C+36]+J→Z[C+38]
Z[C+44]+Z[C+45]+K-P→Z[C+43]
FileName:HXBYP 横向边仰坡放样程序
Cls:Norm 1
Z[C+40]→I:"QPD-DL"?I:I→Z[C+40] 输入起坡点与中桩距离常数
Z[C+41]→I:"QPD-DZ"?I:I→Z[C+41] 输入起坡点与中桩高差常数
Z[C+42]→I:"i"?I:I→Z[C+42] 输入边仰坡坡度,左仰坡(路堑)为正,右仰坡(路堑)为负,左边坡为负,右边坡为正
Cls:Z[C+43]→I:"DQD-Z"?I:I→Z[C+43] 输入实测高程
Prog"TURNZH"
Prog "GCJS"
(Z[C+43]-Z-Z[C+41])Z[C+42]+Z[C+40]→B
Fix 3:B-Z[C+2]◢ 显示与上一次测点的偏差
B→Z[C+2]
FileName:ZXBYP 纵向仰坡放样程序(隧道进口使用)
Cls:Norm 1:Z[C+33]→I:"QPD-ZH"?I:I→Z[C+33] 输入起坡点桩号
Z[C+34]→I:"QPD-Z"?I:I→Z[C+34] 输入起坡点高程
Z[C+42]→I:"i"?I:I→Z[C+42] 仰坡时(隧道进出口仰坡),进口为正,出口为负)
Cls:Z[C+43]→I:"DQD-Z"?I:I→Z[C+43] 输入实测高程
Prog"TURNZH"
Z[C+42](Z[C+43]-Z[C+34])+Z[C+33]→G
Fix 3:G-Z[C+1]◢ 显示与上一次测点的偏差
G→Z[C+1]
FileName:SET 设置程序
Lbi S
Norm 1
50→C
50→Z[C+22]
0→K
Z[C+5]→I:"1 Or 2"?I:I→Z[C+5] ;选择1线或者2线
180Z[C+3]÷π→J:"XZJJ"?J:Jπ÷180→Z[C+3] ;斜桩夹角
If I=1:Then Z[C+8]→Z[C+6]:Z[C+9]→Z[C+7]
Z[C+12]→Z[C+16]:Z[C+13]→Z[C+17]:Z[C+18]→Z[C+20]
Else Z[C+10]→Z[C+6]:Z[C+11]→Z[C+7]
Z[C+14]→Z[C+16]:Z[C+15]→Z[C+17]::Z[C+19]→Z[C+20]
IfEnd
Z[C+7]+3→Z[C+31]
0→I:"1PQX,2SQX,3YSDS"?I ;1输入平曲线要素,2输入竖曲线要素,3输入1、2线夹平竖曲线交点(变坡点)数量以让程序规划内存建立要素数据为,其它值退出本程序
I=1 => Goto 1:I=2 => Goto 2:I=3 => Goto 3
I≠0=>Prog"DATLOCK"
Prog"SETPFDYS"
Stop
Lbi 1 ;平曲线要素输入部分
Z[C+6]→D
-1→Z[D+3]
For 1→J To Z[C+16]
Cls:"PQX":Locate 9,1,J
Z[D+1]→I:"N"?I:I→Z[D+1] ;请输入N坐标
Z[D+2]→I:"E"?I:I→Z[D+2] ;请输入E坐标
Z[D+3]→I:"R"?I:I→Z[D+3] ;请输入半径R
Z[D+4]→I:"LS1"?I:I→Z[D+4] ;请输入缓和曲线1长度
Z[D+5]→I:"LS2"?I:I→Z[D+5] ;请输入缓和曲线2长度
D+5→D
Next
1→Z[D-2]
Goto S
Lbi 2 ;竖曲线要素输入部分
Z[C+7]→D
-1→Z[D+3]
For 1→J To Z[C+17]
Cls:"SQX":Locate 9,1,J
Z[D+1]→I:"BPDZH"?I:I→Z[C+1] ;请输入变坡点桩号
Z[D+2]→I:"BPDGC"?I:I→Z[C+2] ;请输入变坡点高程
Z[D+3]→I:"R"?I:I→Z[C+3] ;请输入半径R
D+3→D
Next
1→Z[D]
Goto S
Lbi 3 ;要素点数输入部分
Z[C+12]→I:"1PQXDS"?I:I→Z[C+12] ;输入1线平曲线点数,最小值为3
Z[C+13]→I:"1SQXDS"?I:I→Z[C+13] ;输入1线竖曲线点数,最小值为3
Z[C+18]→I:"1JDZH"?I:I→Z[C+18] ;输入1线平曲线第一个交点的交点桩号
Z[C+14]→I:"2PQXDS"?I:I→Z[C+14] ;输入2线平曲线点数,最小值为3
Z[C+15]→I:"2SQXDS"?I:I→Z[C+15] ;输入2线竖曲线点数,最小值为3
Z[C+19]→I:"2JDZH"?I:I→Z[C+19] ;输入2线平曲线第一个交点的交点桩号
C+Z[C+22]→Z[C+8] 1线路平曲线要素指针偏移基数
Z[C+8]+5Z[C+12]→Z[C+9] 1线路竖曲线要素指针偏移基数
Z[C+9]+3Z[C+13]→Z[C+10] 2线路平曲线要素指针偏移基数
Z[C+10]+5Z[C+14]→Z[C+11] 2线路竖曲线要素指针偏移基数
Z[C+11]+3Z[C+15]→Z[C+21] 要素数据库结束指针
Z[C+21]+1→Z[C+30]
Z[C+21]→DimZ 增加额外变量
-1→K
Goto S
FileName:SETPFDYS 交点要素=>分段要素
Norm 1
50→C
Rad
Z[C+6]+5→D
Z[C+21]+1→F
F+6→DimZ
-1→Z[F] ; 设置分段要素开始标志
Z[C+20]→V ; 从数据库读入当前线第一个平曲线交点桩号
0→G
Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3]) ;计算第一条直线的距离I,计算方位角J
J→H
Z[D-4]→Z[F+1] 直线段
Z[D-3]→Z[F+2]
V-I→Z[F+3]
For 1→G To Z[C+16]-2
Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3]) ;计算第本交点与下一交点的距离I,计算方位角J
I→W:J→H
Pol(Z[D+6]-Z[D+1],Z[D+7]-Z[D+2])
J-H→K ;计算转角K,负值是左转角,正值是右转角
IF Abs(K)>π:Then If K>0:Then K-2π→K:Else K+2π→K:IfEnd:IfEnd
Z[D+3]→R ;从数据库读入半径R
Z[D+4]→L ;从数据库读入缓和曲线1长度
Z[D+5]→M ;从数据库读入缓和曲线2长度
L÷2÷R→B ;计算缓和曲线1的B0角
M÷2÷R→O ;计算缓和曲线2的B0角
(Abs(K)-B-O)R→P ;计算圆曲线长度
L2÷24÷R-L^(4) ÷2384÷R^(3) →Q ;内移值计算方法2
L÷2-L^(3) ÷240÷R2→S ;切线增长值计算方法2
M2÷24÷R-M^(4) ÷2384÷R^(3) →J ;内移值计算方法2
M÷2-M^(3) ÷240÷R2→I ;切线增长值计算方法2
Abs(π÷2- Abs(K)) →A
Rtan(Abs(K÷2))+S+J÷Cos(A)-QTan(A)→T ;计算切线1
Rtan(Abs(K÷2))+I+Q÷Cos(A)-JTan(A)→U ;计算切线2
H<0=>H+2π→H
1→A
K<0 =>-1→A
H→Z[F+4]
0→Z[F+5]
0→Z[F+6]
F+6→F
F+6→DimZ
Rec(T,H) 缓和段1
Z[D+1]-I→N
Z[D+2]-J→E
N→Z[F+1]
E→Z[F+2]
V-T→Z[F+3]
L=0=>Goto A
H→Z[F+4]
0→Z[F+5]
A÷R→Z[F+6]
F+6→F
F+6→DimZ
Lbi A 圆弧段
0→I:0→J
L=0=>Goto B
Pol(L-L^(3)÷40÷R2,L2÷6÷R-L^(4)÷336÷R^(4))
Lbi B
Rec(I,H+AJ)
N+I→N
E+J→E
N→Z[F+1]
E→Z[F+2]
V-T+L→Z[F+3]
H+AB→Z[F+4]
A÷R→Z[F+5]
A÷R→Z[F+6]
F+6→F
F+6→DimZ
M=0=>Goto C 缓和段2
Rec(2RSin(0.5P÷R),H+AB+AP÷R÷2)
N+I→N
E+J→E
N→Z[F+1]
E→Z[F+2]
V-T+L+P→Z[F+3]
H+AB+AP÷R→Z[F+4]
A÷R→Z[F+5]
0→Z[F+6]
Lbi C
F+6→F
F+6→DimZ
Rec(U,H+K)
Z[D+1]+J→Z[F+1]
Z[D+2]+I→Z[F+2]
V-T+L+P+M→Z[F+3]
V-T+L+P+M-U+I→V
D+5→D
Next
H+K→Z[F+4]
0→Z[F+5]
0→Z[F+6]
F+9→DimZ
1→Z[F+7]
V→Z[F+9] 要素终点桩号
Deg
FileName:READDAT
Z[C+32]→I
I=3=>Prog"READDAT3"
If G<M Or G>M+L :Then ;验证要素是否可用,否则重设要素
I=1=>Prog"READDAT1"
I=2=>Prog"READDAT2"
Prog"REALDAT3"
IfEnd
FileName:READDAT1 平曲线分段要素读取程序1
Z[C+30]→F
0→J
Lbi 1 搜索要素
If G<Z[F+3]:Then
-1=Z[F]=>Goto E:F-6→F:-1→J:Goto 1
Else 1=Z[F+1]=>Goto E:-1=J=>Goto 2:1→J:F+6→F:Goto 1
IfEnd
Lbi 2
F→Z[C+30]
Z[F+1]→Z[C+23] 当前分段要素N坐标
Z[F+2]→Z[C+24] 当前分段要素E坐标
Z[F+3]→Z[C+25] 当前分段要素起点桩号
Z[F+4]→[C+26] 当前分段要素起点方位角(正北)
Z[F+5]→Z[C+27] 当前分段要素起点曲率有左偏负右偏正(注意不半径)
Z[F+6]→Z[C+28] 当前分段要素终点曲率有左偏负右偏正(注意不半径)
Z[F+9]-Z[F+3]→Z[C+29] 当前分段要素长度
Return
Lbi E
Cls
"ERROR"
Stop
READDAT2 文件请输入内容为以下内容以便测试结果与本文一致。
π÷180→J
Goto 1
Lbi 1
If G<30008.396:Then Cls:Stop:IfEnd↙ ;判断待求桩号是否小于本要素起点,如小于就停止运行程序
If G<30661.038(终点里程):Then 2851422.090(起点X)→N:513896.440(起点Y)→E:30008.396→M:213°32′52″J(起点方位角)→H:0 (起点曲率)→A:0(终点曲率)→R:652.642起点至终点长度→L:Goto E:IfEnd↙
If G<30921.038:Then 2850878.162→N:513535.768→E:30661.038→M:213°32′52″J→H:0→A:1÷1300→R:260→L:Goto E:IfEnd↙
If G<31426.367:Then 2850666.478→N:513385.004→E:30921.038→M:219°16′39″J→H:1÷1300→A:1÷1300→R:505.328→L:Goto E:IfEnd↙
If G<31686.367:Then 2850346.483→N:512998.015→E:31426.367→M:241°32′56″J→H:1÷1300→A:0→R:260→L:Goto E:IfEnd↙
If G>31686.367:Then Cls:Stop:IfEnd↙ ;判断待求桩号是否大于本要素终点,如大于就停止运行程序
Lbi E
N→Z[C+23]:E→Z[C+24]:M→Z[C+25]:H→[C+26]:A→Z[C+27]:R→Z[C+28]:L→Z[C+29]
FileName:READDAT3 平曲线分段要素读取程序3
Norm 1
Z[C+23]→N:?N:N→Z[C+23] 当前分段要素N坐标
Z[C+24]→E:?E:E→Z[C+24] 当前分段要素E坐标
Z[C+25]→M:"SZH"?M:M→Z[C+25] 当前分段要素起点桩号
180Z[C+26]÷π→H:H◤DMS◢:"FWJ"?H:Hπ÷180→H:H→Z[C+26] 当前分段要素起点方位角(正北)单位:度分秒
Z[C+27]→A:"SR"?A:A→Z[C+27] 当前分段要素起点曲率有左偏负右偏正(注意是半径的倒数)
Z[C+28]→R:"ER"?R:R→Z[C+28] 当前分段要素终点曲率有左偏负右偏正(注意是半径倒数)
Z[C+29]→L:?L:L→Z[C+29] 当前分段要素长度
Return
FileName:GCJS 高程计算
Z[C+31]→D
0→J
Lbi S
D→Z[C+31]
Z[D-2]→I
Z[D-1]→V
Z[D+1]→K
Z[D+2]→O
(O-V)÷(K-I)→U
Z[D+4]→I
Z[D+5]→V
(V-O)÷(J-K)→V
U-V→Z ;为正时是凸型竖曲线,负是时为凹竖曲线
Z[D+3]→I ;读入半径
Abs(IZ)÷2→T ;切线长
If G<K-T:Then ;点在切点前
If J=1 Or Z[D]=-1 :Then UG-UK+O→Z :Return:IfEnd ;计算高程Z
-1→J:D-3→D:Goto S
Else If G<K:Then ;点在本交点的切点1和变坡点之间
G-K+T→Q
Q2÷2÷I→I
Z>0=>-I→I
O-UT+UQ+I→Z ;计算高程Z
Return
Else If G<K+T:Then ;点在本交点的变坡和切点2之间
G-K-T→Q
Q2÷2÷I→I
Z>0=>-I→I
O+VT+VQ+I→Z ;计算高程Z
Return
Else If J=-1 Or Z[D+3]=1 :Then
O+VG-VK→Z ;计算高程Z
Return
Else 1→J:D+3→D:Goto S
IfEnd :IfEnd:IfEnd:IfEnd