单交点单圆曲线中边桩坐标计算程序(PM4-3)
(2) 主程序——PM4-3,占用内存1070 字节。
"SINGLE CIRCLE CURVE" 显示程序标题1
"METHOD OF COORDINATE PM4-3" 显示坐标法标题2
Deg:ClrStat:FreqOn:Fix 3 基本设置
14 DimZ 定义额外变量
"JD MILEAGE PEG(m)="?Z 输入以m 为单位的交点桩号
"JD X(m)="?U 输入交点x 坐标
"JD Y(m)="?V 输入交点y 坐标
"ZD X(m)="?M 输入转点x 坐标
"ZD Y(m)="?N 输入转点y 坐标
Pol(U-M,V-N):Cls 计算ZD JD 的边长与方位角
If J<0:Then J+360 A:Else J A:IfEnd 判断ZD JD 的方位角A
"TURNING ANGLE -L,+R(Deg)="?Q 输入交点路线转角,左偏为负,右偏为正
If Q<0:Then -1 Z[10]:Else 1 Z[10]:IfEnd 确定转角数值
Q Z[4]:Abs(Q) D 保存转角及符号
"R(m)="?R 输入圆曲线半径
Rtan(0.5D) T 计算切线长
RDπ÷180 L 计算曲线长
R(cos(0.5D)-1-1) E 计算外距
2T-L J 计算切曲差
"T(m)=":T 显示切线长
"L(m)=":L 显示曲线长
"E(m)=":E 显示外距
"J(m)=":J 显示切曲差
Z-T Z[1]:Z[1]+0.5L Z[2]:Z[2]+0.5L Z[3] 计算ZY,QZ,YZ 点桩号
Z[1] List X[1] 存储ZY 点的桩号到统计串列
U-Tcos(A) List Y[1]:V-Tsin(A) List Freq[1] 计算并存储ZY 点的测量坐标到统计串列
"ZY PEG(m)=":List X[1] 显示ZY 点桩号及坐标
"ZY-X(m)=":List Y[1]
"ZY-Y(m)=":List Freq[1]
"WL(m),0 NO="?B 输入路面左半幅宽度
If B>0:Then List Y[1]+Bcos(A-90) Z[11] 计算并显示ZY 点的左边桩坐标
List Freq[1]+Bsin(A-90) Z[12]
"XL(m)=":Z[11]
"YL(m)=":Z[12]
IfEnd
"WR(m),0 NO="?C 输入路面右半幅宽度
If C>0:Then List Y[1]+Ccos(A+90) Z[13] 计算并显示ZY 点的右边桩坐标
List Freq[1]+Csin(A+90) Z[14]
"XR(m)=":Z[13]
"YR(m)=":Z[14]
IfEnd
Z[2] List X[2]:2 K 存储ZY 点的桩号到统计串列
Prog "SUB4-31" 调子程序计算并显示QZ 点坐标
Z[3] List X[3]:3 K 存储YZ 点桩号
Prog "SUB4-31" 调子程序计算并显示YZ 点坐标
If R<30:Then 5 I:Else If R<60:Then 10 I:Else 20 I:IfEnd:IfEnd 确定整桩间距
"INT DIST(m)="?O 输入整桩间距
If O>0:Then O I:IfEnd 输入的整桩间距大于零时,使用输入值
"ONLY CALC +PEG(1)"? G 输入1 为只计算加桩点的坐标
If G=1:Then Goto 1:IfEnd
K+1 K 计数变量计数
Int(Z[1]÷I)I+I List X[K] 计算并存储从ZY 点开始的第一个整桩号
Prog "SUB4-31" 调子程序计算并显示坐标
Do 计算ZY 点至YZ 点
K+1 K 计数变量计数
List X[K-1]+I List X[K] 计算并存储整桩号
Prog "SUB4-31" 调子程序计算并显示坐标
LpWhile List X[K]+I
Do
"+PEG(m)="? F 输入加桩号
If F List X[1]:Then Break:IfEnd 加桩号小于ZH 点桩号时结束程序运行
If F List X[3]:Then Break:IfEnd 加桩号大于HZ 点桩号时结束程序运行
K+1 K 计数变量计数
F List X[K] 存储加桩号到统计串列
Prog "SUB4-31" 调子程序计算并显示偏角弦长
LpWhile F>0 没有计算到YZ 点时继续循环
"PM4-3 END"
(3) 子程序——SUB4-31,占用内存498 字节。
根据存储在List X[K]中的逐桩点桩号,计算中、左、右桩点坐标。
List X[K]-Z[1] Z[5] 计算ZY 点至逐桩点的弧长
90Z[5]÷(Rπ) Z[6] 计算ZY 点至逐桩点的弦切角
2Rsin(Z[6]) Z[7] 计算ZY 点至逐桩点的弦长
A+Z[10]Z[6] Z[8] 计算ZY 点至逐桩点的方位角
A+2Z[10]Z[6] Z[9] 计算j 点切线方位角
List Y[1]+Z[7]cos(Z[8]) List Y[K] 存储X 坐标到统计串列
List Freq[1]+Z[7]sin(Z[8]) List Freq[K] 存储Y 坐标到统计串列
If List X[K]=Z[2]:Then "QZ PEG(m)=" 判断桩号提示字符
Else If List X[K]=Z[3]:Then "YZ PEG(m)="
Else "INT PEG(m)=":IfEnd:IfEnd
List X[K] 显示桩号
"X(m)=":List Y[K]
"Y(m)=":List Freq[K]
"WL(m),0 NO="?B
If B>0:Then List Y[K]+Bcos(Z[9]-90) Z[11] 计算左边桩坐标
List Freq[K]+Bsin(Z[9]-90) Z[12]
"XL(m)=":Z[11]
"YL(m)=":Z[12]
IfEnd
"WR(m),0 NO="?C
If C>0:Then List Y[K]+Ccos(Z[9]+90) Z[13] 计算右边桩坐标
List Freq[K]+Csin(Z[9]+90) Z[14]
"XR(m)=":Z[13]
"YR(m)=":Z[14]
IfEnd
GAUSSLE坐标正反算fx-5800程序
1.正算主程序 (GSZS)
?K:Prog “DAT-M-DZD”: ((P-R)÷(2(H-O(字母))PR))→D : “L(-Z +Y)” ?L:
“ANG”?M : (Abs(K-O(字母))) →J:Prog"SUB1":If (F-M) <0: Then (F-M+360) →F: Else(F-M) →F: IfEnd
“FWJ=”:F ●DMS(显示度分秒)◢
“X=”:X◢
”Y=”:Y◢
2. 反算主程序 (GSFS)
?K:Prog “DAT-M-DZD”: ?X:?Y:X→Z[2]:Y→Z[3]: ( (P-R)÷(2(H-O(字母))PR)) →D: (Abs((Y-S)cos(G-90)-(X-I)sin(G-90)) ) →J: 0→L:90→M: Lbl 0:Prog "SUB1":((Z[3]-Y)cos(G-90+QJ(1÷P+JD)×180÷π)) →Z[20]:((Z[2]-X)sin(G-90+QJ(1÷P +JD) ×180÷π)) →Z[21]:( Z[20]- Z[21]) →L:If Abs(L)<10∧(-6): Then Goto1:Else (J+L)→J:Goto 0: IfEnd
Lbl 1:0→L:Prog "SUB1":((Z[3]-Y)÷sin(F))→L: (O+J)→K:“LC=”:K◢
L→L :“PJ(-Z +Y)=”:L◢
3. 反算,正算子程序(SUB1)
0.1184634425→A:0.2393143352→B: 0.2844444444→Z[4]:0.0469100770→C: 0.2307653449→E: 0.5→Z[1]:
((P-R)÷(2(H-O(字母))PR))→D : (Acos(G+QCJ(1÷P+CJD)×180÷π))
→Z[5]: ( Bcos(G+QEJ(1÷P+EJD)×180÷π)) →Z[6]: (Z[4]cos(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)) →Z[7]:( Bcos(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)) →Z[8]:(Acos(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)) →Z[9]: (Z[5]+Z[6] +Z[7] +Z[8] +Z[9])→Z[10]: (J×Z[10]) →Z[11]:(I+ Z[11]) →X: (Asin(G+QCJ(1÷P+CJD)×180÷π)) →Z[12]:(Bsin(G+QEJ(1÷P+EJD)×180÷π)) →Z[13]:(Z[4]sin(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)) →Z[14]:(Bsin(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)) →Z[15]:(Asin(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)) →Z[16]:( Z[12]+ Z[13]+ Z[14]+ Z[15]+ Z[16])→Z[17] : (J×Z[17]) →Z[18]:(S+ Z[18]) →Y: (G+M) →Z[19]:(( Z[19]+QJ(1÷P+JD) ×180÷π)) →F: (X+LcosF)→X:(Y+LsinF) →Y
Return
4. 线元要素数据库:(DAT-M-DZD )
If K≥(线元起点里程)And K<(线元终点里程):Then (线元起点横坐标x) →I:(线元起点纵坐标y)→S: (线元起点里程)→O: (线元起点方位角)→G:(线元终点里程)→H:(线元起点半径)→P:(线元终点半径)→R:Q(Z=-1 ZX=0 Y=1)(偏转系数)→Q: IfEnd
……….(注:如有多个曲线元要素继续添加入数据库中)
说明:
一、程序功能及原理
1.功能说明:
本程序由两个主程序——正算主程序(GSZS)、反算主程序(GSFS)和两个子程——正算子程序(SUB1)、线元数据库(DAT-M)构成,可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点坐标、起点里程、起点切线方位角、终点里程、起点曲率半径、止点曲率半径)及里程边距或坐标,对该曲线段范围内任意里程中边桩坐标进行正反算。本程序转化后可以在CASIO fx-4800P计算器及 CASIO fx-4850P计算器上运行。由于加入了数据库(DAT-M),可实现坐标正反算的全线贯通。
2.计算原理:
利用待求点至线元起点切线作垂线,逐次迭代趋近原理反算里程及边距。
二、使用说明
1、规定
(1) 以道路中线的前进方向(即里程增大的方向)区分左右;当线元往左偏时, Q=-1;当线元往右偏时,Q=1;当线元为直线时,Q=0。
(2) 当所求点位于中线时,L=0;当位于中线左侧时,L取负值;当位于中线右侧时,L取正值。
3) 当线元为直线时,其起点、止点的曲率半径为无穷大,以10的45次代替。
(4) 当线元为圆曲线时,无论其起点、止点与什么线元相接,其曲率半径均等于圆弧的半径。
(5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。
(6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
(7)曲线元要素数据库(DAT-M)可根据线型不同分为各个线元段输入到DAT-M中,即分为直线段、缓和曲线、圆曲线等。
(8)正算时可仅输入里程和边距及右交角可实现全线计算,但反算时只能通过首先输入里程K值读取数据库DAT-M,计算器自动将里程K所在线元数据赋给反算主程序GSFS进行试算,试算出的里程和边距须带入正算主程序GSZS中计算坐标,若坐标吻合则反算正确。
2、输入与显示说明
(1)输入部分:
I ?线元起点的X坐标
S?线元起点的Y坐标
O?线元起点里程
G ?线元起点切线方位角
H ?线元终点里程
P ?线元起点曲率半径
R?线元止点曲率半径
Q ? 线 元左右偏标志(左偏Q=-1,右偏Q=1,直线段Q=0)
K ? 正算时所求点的里程
L ? 正算时所求点距中线的边距(左侧取负值,右侧取正值,在中线上取零)
ANG?正算边桩时左右边桩连线与线路中线的右交角
X ? 反算时所求点的X坐标
Y ? 反算时所求点的Y坐标
M ? 斜交右角
(2)显示部分
X正算时,计算得出的所求点的X坐标
Y正算时,计算得出的所求点的Y坐标
K反算时,计算得出的所求点的里程
L反算时,计算得出的所求点的边距
三、算例
某匝道的由五段线元(直线+完整缓和曲线+圆曲线+非完整缓和曲线+直线)组成,各段线元的要素(起点里程S0、起点坐标X0 Y0、起点切线方位角F0、线元长度LS、起点曲率半径R0、止点曲率半径RN、线元左右偏标志Q)如下:
S0 X0 Y0 F0 LS R0 RN Q
500.000 19942.837 28343.561 125 16 31.00 269.256 1E45 1E45 0
769.256 19787.340 28563.378 125 16 31.00 37.492 1E45 221.75 -1
806.748 19766.566 28594.574 120 25 54.07 112.779 221.75 221.75 -1
919.527 19736.072 28701.893 91 17 30.63 80.285 221.75 9579.228 -1
999.812 19744.038 28781.659 80 40 50.00 100.000 1E45 1E45 0
(注:该算例中线元要素Ls为程序修改前须输入的线元长度,程序修改后改为输入线元终点里程KN)