卡西欧5800公路坐标正反算程序.docx
《卡西欧5800公路坐标正反算程序.docx》由会员分享,可在线阅读,更多相关《卡西欧5800公路坐标正反算程序.docx(16页珍藏版)》请在冰豆网上搜索。
卡西欧5800公路坐标正反算程序
一、坐标正算基本公式………………………………………………………02
二、坐标反算原理………………………………………………………04
三、高程数据库录入变换…………………………………………………05
四、计算器程序………………………………………………………07
01、ZBZS(坐标正算)………………………………………………………07
02、ZBFS(坐标反算)………………………………………………………08
03、GCJF(高程积分)………………………………………………………09
04、PJFY(坡脚放样)………………………………………………………10
05、JFCX(积分程序)………………………………………………………11
06、ZBFY(坐标放样)………………………………………………………11
07、DT(递推)………………………………………………………12
08、HP(横坡)………………………………………………………13
09、LK(路宽)………………………………………………………14
10、SJK1(平面数据库)………………………………………………14
11、SJK2(纵面数据库)………………………………………………14
12、SJK3(左路宽度数据库)………………………………………………15
13、SJK4(右路宽度数据库)………………………………………………15
14、SJK5(横坡数据库)………………………………………………16
15、SJK6(下边坡数据库)………………………………………………16
16、SJK7(左上边坡数据库)………………………………………………17
17、SJK8(右上边坡数据库)………………………………………………18
五、后记……………………………………………………………………19
CASIO5800计算器公路工程测量程序
一、正算所涉及的计算公式
图表1
在图1中,A点为回旋曲线起点,B点为回旋曲线止点,I点为所求坐标点。
设:
A点的X坐标为XA,Y坐标为YA,A点的切线方位角为α,A点的曲率为ρA,A点的里程为LA,B点的曲率为ρB,B点的里程为LB,I点的曲率为ρI,I点的里程为LI。
I点的切线角为β。
由于回旋线上各点曲率半径Ri和该点至曲线起点的距离L成反比。
故此任意点的曲率为;
(c为常数)
(1)
由式
(1)可知,回旋曲线任意点的曲率按线性变化,由此回旋曲线上里程为Li点的曲率为;
(2)
当曲线右偏时ρB、ρA取正值,反之取负值。
设:
------曲率变化率(3)
------I点至起点A的距离(4)
则有:
(5)
在I点处取一微段,则有:
(单位为弧度)(6)
对上式进行积分并代入式(3)(4),则有;
(7)
因已知回旋曲线起点A的切线方位角α,则里程为Li点的切线方位角为:
(8)
将式(7)代入式(8)得:
(单位为弧度)(9)
对于式(9),当ρA=0,M=0时,则αi=α,式(9)变成计算直线段上任意点切线方位角的计算公式;当ρA=c(c为常数),M=0时,则αi=α+ρAL,式(9)变成计算圆曲线上任意点切线方位角的计算公式。
由图1中不难得出回旋曲线上任意点在路线坐标系下的坐标:
(10)
将式(9)代入式(10),即得本次编程计算基本公式:
(11)
二、反算原理
图表2
在图2中,A点为已知坐标而待求对应中桩桩号及边距的点。
B点为假定的A点对应中桩桩号点。
显然,B点并不对应于A点。
做出B点的切线,过A点做辅助线垂直于B点的切线,相交于C点。
设:
B点的切线方位角为α,B点的桩号为KB,B点的坐标分别为XB、YB,A点的桩号为KA,A点的坐标分别为XA、YA,“B-A”的方位角为β,“B-A”的距离为N,“B-C”的距离为L,“C-A”的距离为Z。
根据前面的坐标正算的公式可以得到α,XB、YB值。
根据计算器内置的Pol(XA-XB,YA-YB)公式(直角坐标转换为极坐标)能得到β,N值。
(1)
(2)
当L=0时,B点是对应于A点的,KB=KA,Z即为A点的距中桩的距离。
当L≠0时,则采用KB=KB+L,对B点进行新的假定,进而再次对L进行解算,直至L=0,或则L值在容许误差范围之内。
三、高程数据库录入变换计算
β
图表3
为利用前面已知的积分公式对高程进行求算,故需对设计给定的纵断面数据进行换算。
如图3中所示,以高程H轴代替平面坐标系的X轴,以里程L代替平面坐标系的Y轴,以H轴为起点,顺时针方向旋转而得到方位角α。
由设计图中已知数据为:
纵坡i,竖曲线半径R,坡长L等。
根据通用的纵断面高程计算公式,容易解算出每个线形变化点的里程及高程,即图3中,A、B、C、D点的“H、L”值。
由于纵坡坡度所采用的为坡度值,即:
(1)
利用反三角函数,即能解算出以L轴为起点,逆时针方向旋转的角值β。
(2)
显然:
(3)
同时结合平面线元,凸曲线可以看为右偏线元,曲率取正值。
反之为负值。
图表4
由于积分程序代入运算的为坡线长度,即上图中的的0A、AB,而已知里程为水平距离,即上图中的0A’、A’B’。
所以在计算出起点积分运算的基本要素:
图3中的(α,H,L)后,我们需将水平距离L换算为坡线长度L’或弧线长度L~。
直线换算比较简单,利用三角函数即能得出下式:
(4)
竖曲线形式,一般采用二次抛物线或圆曲线,在圆心角很小而半径相对较大的使用范围内,二者的吻合是良好的。
以下推导采用圆曲线作为竖曲线的形式。
在图4中,A点为线元起点(直线OA与圆弧AB的切点),B点为待求弧长点,F点为曲线对应圆心。
根据互余角相等原理得出:
运用三角函数计算得出:
;
根据圆曲线方程:
得出:
根据图示:
利用反三角函数:
从而:
根据弧长计算公式得:
(5)
四、卡西欧5800程序;
Ø1、文件名:
“ZBZS”(坐标正算)
"KI="?
H:
(输入计算点桩号并赋值于变量H)
Prog"SJK1":
(进入数据库1中读取数据)
Prog"JFCX":
(进入积分程序进行运算)
"BL="?
P:
(输入计算点距中桩距离并赋值于变量P,左为“-”,右为“+”。
如果需要计算设计路幅宽度“加宽段”,则计算左幅时输入“-1”,右幅为“+1”)
IFABS
(1)=1:
(如果路宽的绝对值为1,则计算设计路幅宽度)
THENPROG”LK”:
(进入路宽程序计算出路幅宽度值)
“BS=”:
EP→P◢(对路幅宽度代入±号以区分左右)
“BL=”:
?
P:
(是否对边距重新赋值,如路堑墙,即边距等于路幅宽度加上水沟宽度)
IFEND:
(判断结束)
"X=":
S+PCos(W+90)→U◢(显示边桩X坐标并赋值于变量U,可对90度进行调整,如斜交30度或其他,但是角度不分左右,即90度=-90度=270度)
"Y=":
T+PSin(W+90)→V(显示边桩Y坐标并赋值于变量V)
PROG”GCJF”:
(进入高程积分程序,计算设计高程)
PROG”HP”:
(进入横坡计算程序,计算横坡)
“H=”:
S+ABS(E)F→Q(显示计算点设计高程,设计高程加上横坡高差)
Ø2、文件名:
“ZBFS”(坐标反算)
"KI="?
H:
(输入假定桩号并赋值于变量H)
"XI="?
V:
(输入反算点X坐标并赋值于变量V)
"YI="?
Y:
(输入反算点Y坐标并赋值于变量Y)
"HI="?
Z:
(输入反算点高程并赋值于变量Z)
Lbl0:
(转移起点命令)
Prog"SJK1":
(进入数据库1中读取数据)
Prog"JFCX":
(进入积分程序进行运算)
Pol(V-S,Y-T)→N:
(将直角坐标转换为极坐标并将极经赋值于变量N)
J→U:
(将极角赋值于变量U。
注意:
在Pol()函数中,计算生成的r值被自动赋值于I,θ值被赋值于J)
NCos(U-W)→R:
(计算假定桩号的偏差并赋值于变量R)
Abs(R)≤0.001=>Goto1:
(判断语句,如果R的绝对值小于容许误差则程序跳转至Lbl1处运行,否则将顺序运行)
H+R+0.001→H:
(对假定桩号H值重新赋值,此处增加的:
“+0.001”是为了避免直线段计算中桩时出现Pol(0,0)的错误。
)
Goto0:
(程序跳转入Lbl0处重新开始运行)
Lbl1:
(转移起点命令)
"KI=":
H◢(显示解算出来的桩号)
"BL=":
NSin(U-W)→P◢(计算反算点至中桩距离并赋值于变量P,右为+)
Prog"GCJF":
(进入高程积分程序进行运算)
PROG”LK”:
(进入路宽程序,计算路幅宽度)
IFP≥0:
(如果反算边距大于0,即右幅)
THEN“BL0=”:
P-E→G◢(反算点距离右边线距离,+为超挖,-为欠挖)
ELSE“BL0=”:
ABS(P)-E→G◢(反算点距离左边线距离,+为超挖,-为欠挖)
IFEND:
(判断结束)
PROG“HP”:
(进入横坡计算程序,计算反算点横坡)
IFABS(P)≤E:
(如果反算点在路幅内,则计算该点挖填,反之则计算该点对应路幅边缘点挖填,并赋值于Q变量)
THEN“ZI=”:
(S+ABS(P)F)-Z→Q:
ELSE“ZI=”:
(S+ABS(E)F)-Z→Q:
IFEND(判断结束)
Ø3、文件名:
“GCJF”(高程积分)
Prog"SJK2":
(进入数据库2调用数据)
H-F→X:
(计算水平距离并赋值于变量X)
IfD=0:
(根据曲率判断直线或圆曲线)
ThenAbs(X÷C0S(90-C))→X:
(如果为直线则计算坡线长并赋值于变量X)
ElseCOS(C)÷Abs(D)→B:
(如果为曲线,则开始计算弧长,具体参照第三节理解)
Sin(C)÷Abs(D)→E:
(参照第三节理解)
√((1÷D)2-(X-B)2)→G:
(参照第三节理解)
tan-1((G-E)÷X)→T:
(参照第三节理解)
πAbs(90-C-T)÷90÷Abs(D)→X:
(计算出弧长并赋值于变量X)
IfEnd:
(条件判断结束)
A+∫(Cos(C+DrX2),0,X)→S:
(计算设计高程值并赋值于S)
Ø4、文件名:
“PJFY”(坡脚放样)
Prog"ZBFS"◢(执行坐标反算程序,并显示)
PROG“LK”:
(执行路宽程序)
IFQ≥0:
(如果为填方,则进入SJK6,调用下边坡数据)
THENPROG“SJK6”:
ELSEIFQ<0ANDP<0:
(如果为挖方,且在路左,则调用左侧上边坡数据)
THENPROG”SJK7”:
ELSEPROG”SJK8”:
(调用右侧上边坡数据)
IFEND:
(第二判断结束)
IFEND:
(第一判断结束)
Abs(Q)≤B=>E+Abs(Q)A→Z:
(高差小于第1级坡高时,计算理论平距并赋值于变量Z)
Abs(Q)≤(B+F)AndAbs(Q)>B=>E+AB+C+(Abs(Q)-B)D→Z:
(高差小于第2级坡高时,计算理论平距并赋值于变量Z)
Abs(Q)≤(B+F+L)AndAbs(Q)>(B+F)=>E+AB+C+DF+G+(Abs(Q)-B-F)K→Z:
(高差小于第3级坡高时,计算理论平距并赋值于变量Z)
Abs(Q)>(B+F+L)=>E+AB+C+DF+G+KL+M+(Abs(Q)-B-F-L)N→Z:
(高差大于第3级坡高时,计算理论平距并赋值于变量Z)
"LI=":
Z-Abs(P)(计算并显示坡脚点距假定点的距离,+为远离中线)
Ø5、文件名:
“JFCX”(积分程序)
(E-D)÷(G-F)→M:
(计算线元曲率变化率并赋值于变量M)
H-F→X:
(计算点至线元起点距离并赋值于变量X。
注意:
此变量仅能为X,因下步积分运算中,计算器对除X以外的所有变量都将视为常数)
C+DrX+0.5rMX2→W:
(计算点切线方位角并赋值于变量W。
注意:
Dr、0.5r中的上标r,为弧度转化符号其值为180/π,计算器内有此符号)
A+∫(Cos(C+DrX+0.5rMX2),0,X)→S:
(计算中桩X坐标值并赋值于S)
B+∫(Sin(C+DrX+0.5rMX2),0,X)→T(计算中桩Y坐标值并赋值于T)
Ø6、文件名:
“ZBFY”,坐标放样
PROG“ZBZS”◢(进入坐标正算程序,并显示)
POL((U-***),(V-***))→L:
(计算放样点和置站点的距离和方位角,***,置站点的X,Y坐标)
IFJ≥0:
(如果方位角大于0,则直接计算,反之则需要加上360度)
THENGOTO0:
ELSEJ+360→J:
IFEND:
(判断结束)
LB10:
“L=”:
L→L◢(显示置站点至放样点的距离)
J→W:
”W=”:
W◥DMS◢(显示置站点至放样点的方位角,并转化为度分秒)
“HS=”?
Z:
(输入实测高程,并赋值于Z)
”HC=”:
Q-Z(计算放样点的挖填,-为挖,+为填)
Ø7、文件名:
“DT”,线元要素递推程序
“XQ=”?
A:
(将起点坐标、方位角、起止点曲率、桩号进行分别赋值)
“YQ=”?
B:
“WQ=”?
C:
“1/RQ=”?
D:
“1/RZ=”?
E:
“KQ=”?
F:
“KZ=”?
G:
G→H:
(计算桩号等于线元止点桩号)
PROG“JFCX”:
(进入积分程序,将X,Y显示并赋值于起点变量)
“XZ=”:
S→A◢
“YZ=”:
T→B◢
G→F:
E→D:
W→C:
(将止点参数赋值于起点)
“WZ=”:
C◥DMS(将方位角转化为以度分秒为单位)
Ø8、文件名:
“HP”(横坡计算程序中轴旋转线性变化)
PROG“SJK5”:
(进入数据库5,调用超高参数)
IFP≤0:
(区分左右,并将横坡百分比化)
THEN0.01C→C:
0.01D→D:
ELSE0.01E→C:
0.01F→D:
IFEND:
IFD=C:
(判断直线和全超高路段,即横坡不变化路段)
THENC→F:
GOTO0:
ELSEB-A→G:
(LS,计算缓和段长度)
IFEND:
IFC>0ORD>0:
(判断超高方向,即平曲线内外)
THENC+(H-A)(D-C)÷G→F:
GOTO0:
(线性内插)
ELSEG-GABS(D-C)÷(ABS(D)-C)→K:
(L0,计算临界长度)
IFEND:
IFABS(D)>ABS(C):
(判断ZH-HY或YH-HZ)
THENH-A→L:
ELSEB-H→L:
IFEND:
IFL≤K:
(超高变化段内侧,判断临界长度以内或以外)
THENC→F:
GOTO0:
ELSEC+(L-K)(D-C)÷(G-K)→F:
GOTO0:
(线性内插)
IFEND:
F→F
Ø9、文件名:
“LK”(路幅宽度计算程序加宽线性变化)
IFP≤0:
(区分左右,分别调用数据)
THENPROG“SJK3”:
ELSEPROG“SJK4”:
IFEND:
C+(H-A)(D-C)÷(B-A)→E:
(线性内插)
Ø10、文件名:
“SJK1”(数据库1,平面数据库)
IfH≤线元止点桩号:
(判断计算点所属线元)
Then****→A:
(线元起点X坐标赋值于变量A)
****→B:
(线元起点Y坐标赋值于变量B)
****→C:
(线元起点方位角赋值于变量C)
±**÷**→D:
(线元起点曲率赋值于变量D。
注意:
线元右偏为+,反之为-,曲率等于1/R,即半径的倒数,直线曲率为0。
)
±**÷**→E:
(线元止点曲率赋值于变量E。
注意:
线元右偏为+,反之为-,曲率等于1/R,即半径的倒数,直线曲率为0。
)
****→F:
(线元起点桩号赋值于变量F)
****→G:
(线元止点桩号赋值于变量G)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø11、文件名:
“SJK2”(数据库2,纵面数据库)
IfH≤线元止点桩号:
(判断计算点所属线元)
Then****→A:
(线元起点高程赋值于变量A)
****→C:
(线元起点方位角赋值于变量C)
±**÷**→D:
(线元起点曲率赋值于变量D。
注意:
凸曲线为+,反之为-,曲率等于1/R,即半径的倒数,直线曲率为0。
)
****→F:
(线元起点桩号赋值于变量F)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø12、文件名:
“SJK3”(数据库3,左路幅宽度数据库)
IfH≤线元止点桩号:
(判断计算点所属线元)
Then****→A:
(线元起点桩号赋值于变量A)
****→B:
(线元止点桩号赋值于变量B)
****→C:
(线元起点左路幅宽度赋值于变量C)
****→D:
(线元止点左路幅宽度赋值于变量D)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø13、文件名:
“SJK4”(数据库4,右路幅宽度数据库)
IfH≤线元止点桩号:
(判断计算点所属线元)
Then****→A:
(线元起点桩号赋值于变量A)
****→B:
(线元止点桩号赋值于变量B)
****→C:
(线元起点右路幅宽度赋值于变量C)
****→D:
(线元止点右路幅宽度赋值于变量D)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø14、文件名:
“SJK5”(数据库5,横坡数据库)
IfH≤线元止点桩号:
(判断计算点所属线元)
Then****→A:
(线元起点桩号赋值于变量A)
****→B:
(线元止点桩号赋值于变量B)
****→C:
(线元起点左路横坡(±i)上坡为+,如2%输入2,-2%输入-2,即可)
****→D:
(线元止点左横坡赋值于变量D)
****→E:
(线元起点右横坡赋值于变量E)
****→F:
(线元止点右横坡赋值于变量F)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø15、文件名:
“SJK6”(数据库6,下边坡坡率数据库)
If(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)…………:
(判断计算点所属线元)
Then****→A:
(距中线第1段坡的坡率)
****→B:
(距中线第1段坡的坡高)
****→C:
(距中线第1段坡的护坡道宽度)
****→D:
(距中线第2段坡的坡率)
****→F:
(距中线第2段坡的坡高)
****→G:
(距中线第2段坡的护坡道宽度)
****→K:
(距中线第3段坡的坡率)
****→L:
(距中线第3段坡的坡高)
****→M:
(距中线第3段坡的护坡道宽度)
****→N:
(距中线第4段坡的坡率)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø16、文件名:
“SJK7”(数据库7,左上边坡坡率数据库)
If(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)…………:
(判断计算点所属线元)
Then****→A:
(距中线第1段坡的坡率)
****→B:
(距中线第1段坡的坡高)
****→C:
(距中线第1段坡的护坡道宽度)
****→D:
(距中线第2段坡的坡率)
****→F:
(距中线第2段坡的坡高)
****→G:
(距中线第2段坡的护坡道宽度)
****→K:
(距中线第3段坡的坡率)
****→L:
(距中线第3段坡的坡高)
****→M:
(距中线第3段坡的护坡道宽度)
****→N:
(距中线第4段坡的坡率)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
Ø17、文件名:
“SJK8”(数据库8,右上边坡坡率数据库)
If(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)OR(H≥起点桩号ANDH≤止点桩号)…………:
(判断计算点所属线元)
Then****→A:
(距中线第1段坡的坡率)
****→B:
(距中线第1段坡的坡高)
****→C:
(距中线第1段坡的护坡道宽度)
****→D:
(距中线第2段坡的坡率)
****→F:
(距中线第2段坡的坡高)
****→G:
(距中线第2段坡的护坡道宽度)
****→K:
(距中线第3段坡的坡率)
****→L:
(距中线第3段坡的坡高)
****→M:
(距中线第3段坡的护坡道宽度)
****→N:
(距中线第4段坡的坡率)
Return:
(从子程序返回调用此子程序的程序)
IfEnd(条件判断结束)
……………………………………………(重复进行下个线元数据录入)
五、后记
2009年12月23日应好友龙龙之邀开始初步编制。
2009年12月24日在网上查阅了其他公路工程测量前辈的大量资料。
2009年12月26日于重庆丰都家中完成初步编制。
2010年3月13日于成德南LJ12标完成了测试修改。
2010年11月14日于云南省昭通市昭巧二级公路三分部进行了完善。
相较于初编程序,调试时主要修改了坐标反算及高程计算程序。
1、坐标反算将原“H+R→H:
”句修改为:
“H+R+0.001→H:
”避免了直线段计算中桩时出现Pol(0,0)的错误。
2、初步编制时,高程计算也采用“JFCX”程序,调试后增加“GCJF”程序专用于高程计算。
对高程通过积分计算时采用的距离进行了修正,解决了坡度较大,距离较长的坡段计算高程时因套用的里程为水平距离而误差较大的问题。
同时针对纵断面仅有直线、圆曲线两种线形及求解量仅为H的情况,对积分程序及数据库进行了简化。
取消了平面坐标计算时关于缓和曲线计算时所需要的步骤及变量。
3、完善时增加了“ZBFY(坐标放样)DT(线元参数递推)LK(路幅宽度即加宽)HP(横坡即超高中轴旋转,超高方式按线性变化率)”程序。
3、由于测试时较为匆忙,测试难免不全面。