有个4800线元法程序,改成5800后,运行后计算某点1的坐标不对,再次运行同样计算该点的坐标,又是对的了,同样计算某点2仍是第二次才能算对,谁能知道怎么回事?
下面是该4800程序
曲线任意里程中边桩坐标正反算及放样fx-4850程序(第五次修改)
本程序是在yshf及hangniu1973两位师傅的成果上作的一次改动,修改内容主要有一下几点:
1、在变量符号上修改,目的是更能与工地实际结合;
2、把原主程序分为两个,更能灵活调用;
3、加入放样程序,做到坐标计算到放样一体化;
4、使得整个测量放样过程更加简单。
附件(点击下载):
GAUSSLE坐标正反算fx-4850程序
源程序
1.正算主程序 GSZS
I"X0":S"Y0":O"K0":G"F0":H"KN":P"R0":R"RN":Q”Q(-Z +Y)” :
D=(P-R)÷(2(H-O)PR):
KL”L(-Z +Y)” :M”ANG(YJJ)”=90:(注:此处若不给M赋值,则可计算斜交点)
J=Abs(K-O):Prog"SUB1":
”FWJ=”:F=F-M:”X=”:X=X:Pause0: ”Y=”:Y=Y◢
2. 反算主程序 GSFS
XY:Z[2]=X:Z[3] =Y:
I"X0":S"Y0":O"K0":G"F0":H"KN":P"R0":R"RN":Q”Q(-Z +Y)” :
D=(P-R)÷(2(H-O)PR):
J=Abs((Y-S)cos(G-90)-(X-I)sin(G-90)):
L=0:M”M(YJJ)”=90:
Lbl 0:Prog "SUB1":
L=(Z[3]-Y)cos(G-90+QJ(1÷P+JD)×180÷π)-(Z[2]-X)sin(G-90+QJ(1÷P +JD) ×180÷π):
AbsL<1E-6=>Goto1:≠>J=J+L:Goto 0Δ←┘
Lbl 1:L=0:Prog "SUB1":L=(Z[3]-Y)÷sinF:
”K=”:K=O+J:Pause0:”L=”:L=L◢
3. 正算子程序(SUB1)
Defm 4:
A=0.1184634425:B=0.2393143352:Z[4]=0.2844444444:C=0.0469100770:E=0.2307653449:Z[1]=0.5:
X=I+J(Acos(G+QCJ(1÷P+CJD)×180÷π)+Bcos(G+QEJ(1÷P+EJD)×180÷π)+Z[4]cos(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)+Bcos(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)+Acos(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)):
Y=S+J(Asin(G+QCJ(1÷P+CJD)×180÷π)+Bsin(G+QEJ(1÷P+EJD)×180÷π)+Z[4]sin(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)+Bsin(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)+Asin(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)):
F=G+QJ(1÷P+JD) ×180÷π+M:X=X+LcosF:Y=Y+LsinF
4. 曲线元要素数据库:DAT-M
K≥O=>K<H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
K≥O=>K<H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
K≥O=>K<H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
K≥O=>K<H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
K≥O=>K≤H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
……………………………
K≥O=>K≤H=> I=**:S=**:O=**:G=**:H=**:P=**:R=**:Q=**⊿⊿←┘
(注:如有多个曲线元要素继续添加入数据库DAT-M中)
5、M线(坐标正算)组合程序 MG-ZB
Prog”DAT-M”:Prog”GSZS”
6、M线(坐标计算-放样)组合程序 MG-FY
Prog”MG-ZB”:Prog”LTKZD”: Prog”FY”
7、M线(坐标反算)组合程序 M-GSFB
Prog”DAT-M”:Prog”GSFS”
说明:
一、程序功能及原理
1.功能说明:
本程序由两个主程序——正算主程序(GSZS)、反算主程序(GSFS)和两个子程——正算子程序(SUB1)、线元数据库(DAT-M)构成,可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点坐标、起点里程、起点切线方位角、终点里程、起点曲率半径、止点曲率半径)及里程边距或坐标,对该曲线段范围内任意里程中边桩坐标进行正反算。本程序可以在CASIO fx-4800P计算器及 CASIO fx-4850P计算器上运行。由于加入了数据库(DAT-M),可实现坐标正反算的全线贯通。
组合程序5可实现M线的正算贯通,组合程序7可实现M线的反算贯通,组合程序6可实现坐标计算到放样一体化。
2.计算原理:
利用Gauss-Legendre 5点通用公式计算线路中边桩坐标并计算放样数据。
利用待求点至线元起点切线作垂线,逐次迭代趋近原理反算里程及边距。
二、使用说明
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)输入部分:
X0 ?线元起点的X坐标
Y0 ?线元起点的Y坐标
K0 ?线元起点里程
F0 ?线元起点切线方位角
KN ?线元终点里程
R0 ?线元起点曲率半径
RN ?线元止点曲率半径
Q ? 线 元左右偏标志(左偏Q=-1,右偏Q=1,直线段Q=0)
K ? 正算时所求点的里程
L ? 正算时所求点距中线的边距(左侧取负值,右侧取正值,在中线上取零)
ANG?正算边桩时左右边桩连线与线路中线的右交角
X ? 反算时所求点的X坐标
Y ? 反算时所求点的Y坐标
M ? 斜交右角
线元要素数据库中K≥O=>K<H=>中的O和H分别为该段线元起点里程和终点里程
A、 B、Z[4] 是Gauss-Legendre求积公式中的插值系数
C 、E、Z[1] 是Gauss-Legendre求积公式中的求积节点
(2)显示部分:
X=××× 正算时,计算得出的所求点的X坐标
Y=××× 正算时,计算得出的所求点的Y坐标
K=××× 反算时,计算得出的所求点的里程
L=××× 反算时,计算得出的所求点的边距
三、算例
某匝道的由五段线元(直线+完整缓和曲线+圆曲线+非完整缓和曲线+直线)组成,各段线元的要素(起点里程S0、起点坐标X0 Y0、起点切线方位角F0、线元长度LS、起点曲率半径R0、止点曲率半径RN、线元左右偏标志Q)如下:
S0 X0 Y0 F0 LSR0 RNQ
500.000 19942.837 28343.561 125 16 31.00 269.256 1E45 1E450
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 1E450
(注:该算例中线元要素Ls为程序修改前须输入的线元长度,程序修改后改为输入线元终点里程KN)
放样程序 FY
U”XJ”:V”YJ”:W”XH”:Z”YH”:XY:I=W-U:J=Z-V:Pol(I,J):J<0=>J=J+360Δ
“HSJL=”:I◢
O”HF”=J:X=0=>U=U+LCos(J+P”μ”):
V=V+LSin(J+P”μ”):
”X=”:U:Pause0:”Y=”:V:≠>I=X-U:J=Y-V: Pol(I,J):J<0=>J=J+360:Δ
H”QF”=J:J=H-O:J<0=>J=J+360:Δ
“ANG=”:J→DMS (该处不输Pause0语句亦可实现“ANG=”和“QSJL=”的同时出现)
“QSJL=”:I
凌铁大桥控制点数据库 LTKZD
A=21:B=22:C=23:D=24:E=25:F=26:G=27:H=28:I=29←┘
T “ZJDH”:←┘
T=11=>U=****:V=****⊿←┘
T=12=>U=****:V=****⊿←┘
T=13=>U=****:V=****⊿←┘
T=15=>U=****:V=****⊿←┘
T= 4 =>U=****:V=****⊿←┘
T= A=>U=****:V=****⊿←┘
T= B=>U=****:V=****⊿←┘
T= C=>U=****:V=****⊿←┘
……………………………
(注:如有多个控制点继续添加入数据库LTKZD中)
N “HSDH”:←┘
N=11=>W=****:Z=****⊿←┘
N=12=>W=****:Z=****⊿←┘
N=13=>W=****:Z=****⊿←┘
N=15=>W=****:Z=****⊿←┘
N= 4 =>W=****:Z=****⊿←┘
N= A=>W=****:Z=****⊿←┘
N= B=>W=****:Z=****⊿←┘
N= C=>W=****:Z=****⊿←┘
……………………………
(注:如有多个控制点继续添加入数据库LTKZD中)
组合程式 LTFY
Prog ”LTKZD”: Prog ”FY”
说明:
一、程序功能及原理
1、功能说明:
FY程序有两个功能,当前视点坐标X输入为零时,程式执行转点功能,即首先通过全站仪测定任意转点距置镜点距离L及置镜点与转点连线和置镜点与后视点连线的夹角P”μ”并输入计算器,即可计算出任意转点坐标;另一功能是坐标放样,即输入放样点X、Y坐标,从而计算出与置镜点距离 “QSJL=”以及全站仪归零放样拨角“ANG=”(前视方位角-后视方位角)。
凌铁大桥控制点数据库LTKZD功能是与FY程序配合后,可实现坐标放样时仅输入置镜点、后视点的编号,从而减少其数据的大量输入。
2、计算原理:
利用坐标计算和方位角的基本知识以及计算器极坐标转换功能键POL
二、使用说明
1、规定
当前视点坐标X输入为零时,程式执行转点功能
2、输入与显示说明
(1)输入部分:
XJ ? 置镜点X坐标
YJ ? 置镜点Y坐标
XH ? 后视点X坐标
YH ? 后视点Y坐标
X ? 放样点X坐标
Y ? 放样点Y坐标
L ? 实测转点距置镜点距离
P”μ” ? 实测置镜点与转点连线和置镜点与后视点连线的夹角
T ? 置镜点点号ZJDH
N ? 后视点点号HSDH
11、12、13、15、4、A、B、C、D、E、F、G、H、I分别为凌铁大桥控制点点号,计算输入时按以上数字或字母输入计算器即可
(2)显示部分
HSJL=**** 后视距离(置镜点与后视点之间距离)
ANG= **** 全站仪归零放样拨角
QSJL=**** 前视距离(置镜点与放样点之间距离)
X= **** 转点X坐标
Y= **** 转点Y坐标
三、其它说明
1、若需要编制另一线路控制点程序,仅需新建另一数据库子程序LTKZD,新建时仅需改变上文中红色显示数据即可。
2、程式中11~15、及A~I均为控制点编号,程式开头首先给A、B赋值:A=21:B=22等,目的是为了在程式运行要求输入点号时能直接输入字母A、B、C等。
GAUSSLE5反算贯通程序(fx-4850)
本文是在第五次修改版的基础上的又一次改进,目的是在少占内存的情况下实现反算全线贯通
源程序
1.M线反算贯通主程序 FSGT
XY:Z[2]=X:Z[3]=Y: ←┘
K=O1:Prog”AB”:AB<θ=> Prog”FSLC”:Gotoθ⊿←┘
K=O2:Prog”AB”:AB<θ=> Prog”FSLC”:Gotoθ⊿←┘
K=O3:Prog”AB”:AB<θ=> Prog”FSLC”:Gotoθ⊿←┘
……………………………(注:如有多个线元则继续添加,其中O1 、O2、O3为第一、二、三段线元的起点里程,必须是具体数字)
Lbl θ
2. 里程迭代子程序 FSLC
K=O: Lbl 1:I=T:J=Abs(K-O):L=θ:M=θ: Prog”SUB1”:I=Z[2]-X:J=Z[3]-Y:Pol(I,J):
J=J-F:A=IcosJ:K=K+A:AbsA≥0.001=> Goto1: ≠>”K=”:K:Pauseθ:“L=”:
L=IsinJ
3. 垂距计算子程序 AB
Prog”DAT-M”:T=I: D=(P-R)÷(2(H-O)PR):J=Abs(H-O):L=θ: M=θ: Prog”SUB1”:
I=Z[2]-I:J=Z[3]-S:Pol(I,J):J=J-G:A=IcosJ:
I=Z[2]-X:J=Z[3]-Y:Pol(I,J):J=J-F:B=IcosJ
说明:
一、程序功能及原理
1.功能说明:
可实现M线的反算贯通。
2.计算原理:
见第五次修改版
二、使用说明
见第五次修改版
三、注意事项
1、”SUB1”和 ”DAT-M”子程序详见第五次修改版
2、程序中θ表示数字零,O表示字母,请注意区分