坐标反算程序
- 格式:xls
- 大小:49.00 KB
- 文档页数:2
经苦心钻研,奋战多日,终于编写出了代码短,速度快,精度高, 功能全的线路坐标正反算程序,欢迎试用并提出宝贵意见。
功能简介及特点:1、选用高斯-勒让德公式作计算内核,保证精度,模块化设计,便于扩充功能。
2、线元数据可自动从数据库调用,也可手工输入。
3、可管理多条线路,如里程不在线路或线元范围,将警告里程偏大、偏小。
4、边桩计算设计为导线式递推方式,可用于由一个中桩推出结构物所有角点坐标。
5、反算实现了智能化操作,只需输入线路号(或手工输线元资料)坐标,不需近似里程,即可自动从起点向后开始试算出里程、位置,如对算出里程、位置表示怀疑,还可以让计算器从终点起再向前试算下一个可能的位置(匝道、回头曲线同一坐标可能会有一个以上结果)。
第三次及以后试算才要求输入近似里程。
6、程序代码规范简洁,便于阅读、理解。
完整程序清单:ZFS %正反算主程序B=.1739274226:C=.5-B:Lbl 1:U"0 ZS 1 FS"=0=>Prog "ZS":工>U=1=>Prog"FS":工>Goto 1ZS %正算子程序{K}:Prog"ZZ":l=0:{l}:l"L" 丰 0=>"Prog"WY":丰 >Prog"ZB"FS %反算子程序{KVW}:V"XC"W" YC":Lbl 2:Prog "ZZ":I=V-S:J=W-T:Pol(I,J: J=J~F:K二K+Rec(l,J:Absl<1m=>Prog"WZ": 半 >Gota\2M=O:{M}:M"O NEXT"=O二>U=U+1:Goto 2: 半 >U=1ZZ %高斯法中桩子程序(4节点)Prog"XL":M=K-L: O=(P-R) 2PQR:D=.0694318442:E=.3300094782:F=1:G=1-E:H=1-D:l=5:Lbl 1:C[l]=A+MrC[l](1 P+OMC[l]:Dsz l:Goto 1:S=X+M(BcosD+CcosE+CcosG+BcosH:T=Y+M(Bsi nD+Csi nE+Csi nG+Bsi nHWY %外移点计算子程序Lbl 1:J=90:{J}:J=F+J"<":F=J:S=S+Rec(l,J:T=T+J: Prog"ZB":l=0:{l}:l"L" 工0=>Goto 1WZ %位置显示子程序"KJ":K:Pause 1:J丄ZB %坐标显示子程序"XY ":S:Pause 1:T AYC %异常处理子程序U=1=>K=L:U=2 △U=3=>K=M:U=4AU=5=>{K}:U=4 △K<L=>"V<!":Z=1△K>M=>">>!":Z=1DL %断链处理子程序"DL":K=L:I>0=>K=L+Q------------------ 以上为程序运算部分,以下为数据库部分XL %线路数据库选择子程序Lbl 1:Z=0:N"0 SD"=0=>Prog"0" △N=1=>Prog"1" △N=2=>Prog"2" △有几条线路仿上行格式输几行Z=1=>{NLX YOPQRK}:Goto 10 %手工输入子程序L"K0"X YAQ"LS"P"R0"R"RN":M二L+Q:Prog" YC"1 %线路一数据库子程序①Lbl B:L=线路起点里程:M=线路终点里程:Prog"YC":Z=1=>Goto E △②Q=线元长:P=起点半径:R=终点半径:K< L+Q二>X=起点X坐标:Y二起点Y坐标:A=起点方位角:Goto E △ L=L+Q:③…… @Q=短链长:K<L+Q=>Prog "DL":Goto B △ L=L+Q:⑤Q=线元长:P=起点半径:R=终点半径:K<L+Q二>X=起点X坐标:Y二起点Y坐标:A=起点方位角:Goto E △ L=L+Q:⑥……炉0=线元长:P=起点半径:R=终点半径:X=起点X坐标:丫二起点Y坐标:A=起点方位角丄bl E2 %线路二数据库子程序输入要求和线路一相同。
坐标正反算程序(5800)反算主程序:FS1.Prog"SJ"2.90U÷π÷R→H 第一回旋线所对应圆心角β013.90V÷π÷R→T 第二回旋线所对应圆心角β024.Rec((Z[3]+Z[4]÷cosK)÷tanK,F+90G):Z[5]+I→Z[11]:Z[6]+J→Z[12]ZH 、HZ点垂线交点坐标5.F-90G→Z[13]ZH点与ZH、HZ点垂线交点连线方位角6.Z[13]+GH→Z[14]HY点与圆心连线方位角7.Z[13]+G(K-T)→Z[15]YH点与圆心连线方位角8.Z[15]+GT→Z[16]HZ点与ZH、HZ点垂线交点连线方位角9.Lbl 0:?X:?Y10.Pol(X-Z[11],Y-Z[12])11.If GIsin(J-Z[13])<0:Then Pol(N-X,E-Y):Rec(I,F-J)12.Q-I→Z: J→S:Cls:“Z=”:Locate3,1,Z:”S=”:Locate 3,2,S◢13.Goto 0:IfEnd 第一直线14.If GIsin(J-Z[16])>0:Then Pol(X-N,Y-E):Rec(I,J-F-GK)15.I-Z[4]+D→Z: J→S:Cls:“Z=”:Locate3,1,Z:”S=”:Locate 3,2,S◢16.Goto 0:IfEnd 第二直线17.If GIsin(J-Z[13])>0:Then Pol(X-Z[9],Y-Z[10])18.If GIsin(J-Z[14])<0:ThenZ[13]→P:U→H:A→M:1→T:Z[5]→Z[17]:Z[6]→Z[18]:F→Z[19]:Goto 1:IfEnd 第一缓和曲线19.If GIsin(J-Z[15])<0:Then Abs(J-Z[14])→Z[20]:Z[20]>360?Z[20]-360→Z[20]20.B+πRZ[20]÷180→Z: G(R-I)→S:Cls:“Z=”:Locate3,1,Z:”S=”:Locate 3,2,S◢21.Goto 0:IfEnd 圆曲线22.If GIsin(J-Z[15])>0:Then Z[16]→P:V→H:D→M:-1→T:Z[7]→Z[17]:Z[8]→Z[18]:F+GK+180→Z[19]:Goto 1:IfEnd 第二缓和曲线23.Lbl 1:Pol(X-Z[11],Y-Z[12]): Abs(J-P)→J:J>180?J-360→J:JπR÷180→L L为以R为半径,以所求点-(Z[11],Z[12])连线与P的角度差计算得的弧长24.Lbl 2:L-L5÷(40R2H2)+L9÷(3456R4H4)-L13÷(599040R6H6)→O25.L3÷(6RH)-L7÷(336R3H3)+L11÷(42240R5H5)-L15÷(9676800R7H7)→P26.Rec(sqrt(O2+P2),Z[19]+TGtan-1(P÷O)):Z[17]+I→O:Z[18]+J→P27.Pol(X-O+0.00001,Y-P+0.00001):Rec(I,J-(Z[19]+90TGL2÷(πRH)))28.If AbsI>0.001:Then L+I→L:Goto 2:Else M+TL→Z:TJ→S:Cls:“Z=”:Locate3,1,Z:”S=”:Locate 3,2,S◢29.Goto 0:IfEnd子程序(曲线要素数据):SJ1.20→DimZ:?M2.If M=1:Then *→F:*→K:*→G:*→U:*→V:*→R:*→Q:*→N:*→E:Goto 1:IfEnd3.If M=2:Then *→F:*→K:*→G:*→U:*→V:*→R:*→Q:*→N:*→E:Goto 1:IfEnd4.………………5.Lbl 1:U2÷24÷R-U4÷2688÷R3+U6÷506880÷R5→Z[1]Z[1]第一回旋线内移值P16.V2÷24÷R-V4÷2688÷R3+V6÷506880÷R5→Z[2]Z[2]第二回旋线内移值P27.(R+Z[2]-(R+Z[1])cosK)÷sinK→M8.(R+Z[1]-(R+Z[2])cosK)÷sinK→P9.M+U÷2-U3÷240÷R2→Z[3]Z[3]第一切线长T110.P+V÷2-V3÷240÷R2→Z[4]Z[4]第二切线长T211.πRK÷180+(U+V)÷2→L 曲线长(Ls1+圆+Ls2)12.Q-Z[3]→A:A+U→B:A+L→D:D-V→C ZH,HY,HZ,YH里程桩号13.0→I:0→J:Rec(Z[3],F+180):N+I→Z[5]:E+J→Z[6]ZH点坐标14.Rec(Z[4],F+GK):N+I→Z[7]:E+J→Z[8]HZ点坐标15.Rec(sqrt(M2+(R+Z[1])2),F+G(K+tan-1((R+Z[2])÷P))):N+I→Z[9]:E+J→Z[10]Z[9],Z[10] 圆心坐标注:F-起始边方位角K-转角G-线路左转输-1,右转输1U-第一回旋线长V-第二回旋线长R-圆曲线半径Q-交点桩号N,E-交点坐标Z-待求点桩号S-偏距(左偏为-,右偏为+)sqrt为根号。
主程序坐标正反算程序名称:ZBZFSLb1 A↙30→Dim Z :"0=ZS,1=FS"?Z ↙If Z=0:Then Goto B:IfEnd↙(Z=0进入里程点坐标正算)If Z=1:Then Prog"FSLCZ "↙(Z=1进入反算里程边桩)Lb1 B ↙Prog”ZBZS” ↙子程序反算里程桩名称:FSLCZLb1 1↙"XK="?X:"YK="?Y↙(输入任意测点的X、Y坐标)“K=”?K ↙(试算里程,任意输入标段内里程点即可,也可以输入大致的估算里程加快速度)Lb1 2↙Prog"SJK ":T-90 →W:W<0=>360+W→W:Abs((Y-Z[19])*Cos(W)-(X-Z[18])*Sin(W))→S↙If S<0.0001:Then Goto 4:Else Goto 3:Ifend↙Lb1 3↙K+S→K: Prog"SJK":T-90 →W:W<0=>360+W→W:Abs((Y-Z[19])*Cos W-(X-Z[18])*Sin (W)→Q↙If Q<0.0001 :Then Q→S: Goto4:Else if Q<S: Then K+Q→K: Goto 2 :Else if Q>S :Then K-Q→K:Goto2:Ifend:Ifend:Ifend↙Lb1 4↙Pol (X-Z[18],Y-Z[19]:"DP(-Z+Y)=":I◢(偏距)"K=":K+S→K◢(里程)Goto 1↙子程序坐标正算名称:ZBZSLb1 0 ↙“XHS="?G(后视点X):"YHS="?L(后视点Y):"XZJ="?M(置镜点X):"YZJ="?N(置镜点Y):Pol(G -M,L-N):"DH=":I(后视距)◢J<0=>J+360→J:"FH=":JDMS◢(后视方位角)Lb1 1↙“K=”?K :(输入所需计算里程)Prog"SJK "↙XI: Z[18]↙YI: Z[19] ↙Pol(Z[18]-M,Z[19]-N): J<0=>J+360→J↙“PJ=”?P↙(输入桩与线路夹角)“PD=”?D↙(输入桩距中线的距离)Z[18]+D*Cos(T+P) →Z[20] ↙Z[19]+D*Sin(T+P) →Z[21] ↙“X=”: Z[20] ◢(放样坐标X)“Y=”: Z[21] ◢(放样坐标Y)Pol(Z[20]-M,Z[21]-N):"D=":I◢(放样距)J<0=>J+360→J:"F=":JDMS◢(放样方位角)Goto 1↙子程序数据库名称:SJKif K<本段曲线终点里程And K≥上段曲线终点里程:Then 本段曲线终点里程→Z[1] :上段曲线终点里程(第一段曲线输起点的里程)→Z[2] :1→O (注:左偏曲线输入-1→O,右偏曲线输入1→O): 半径→R : 曲线偏角→A:第一缓和曲线→Z[6] : 第二缓和曲线→Z [7] : 交点X→B :交点Y→C : 小里程向交点方位角→E : 交点向大里程方位角→F : Pro g”JSPB”:Return: Ifend↙if…………Prog”JSPB”:Return:Ifend(曲线段分段输入)↙补充直线段输入如下(只需输线路的最后一段直线数据)if K<本段直线终点里程And K≥本段直线起点里程:Then 本段直线终点里程→Z[3]:终点X→Z[16]:终点Y→Z[17]:方位角→E: Z[16]+ (K- Z[3])*Cos(E)→Z[18]:Z[17]+ (K- Z[3])*Sin (E)→Z[19] : Return:Ifend↙子程序计算判别名称:JSPBLb1 2 ↙(曲线要素计算)Z[6]/2- Z[6]^3/(240*R^2)+ Z[6]^5/(34560*R^4) →Z[8] ↙(M1)Z[7]/2- Z[7]^3/(240*R^2)+ Z[7]^5/(34560*R^4) →Z[9]↙(M2)Z[6]^2/(24*R)- Z[6]^4/(2688*R^3) →Z[10] ↙(P1)Z[7]^2/(24*R)- Z[7]^4/(2688*R^3) →Z[11] ↙(P2)。
第六章→第三节→导线测量内业计算导线计算的目的是要计算出导线点的坐标,计算导线测量的精度是否满足要求。
首先要查实起算点的坐标、起始边的方位角,校核外业观测资料,确保外业资料的计算正确、合格无误。
一、坐标正算与坐标反算1、坐标正算已知点的坐标、边的方位角、两点间的水平距离,计算待定点的坐标,称为坐标正算。
如图6-6 所示,点的坐标可由下式计算:式中、为两导线点坐标之差,称为坐标增量,即:【例题6-1】已知点A坐标,=1000、=1000、方位角=35°17'36.5",两点水平距离=200.416,计算点的坐标?35o17'36.5"=1163.58035o17'36.5"=1115.7932、坐标反算已知两点的坐标,计算两点的水平距离与坐标方位角,称为坐标反算。
如图6-6可知,由下式计算水平距离与坐标方位角。
(6-3)(6-4)式中反正切函数的值域是-90°~+90°,而坐标方位角为0°~360°,因此坐标方位角的值,可根据、的正负号所在象限,将反正切角值换算为坐标方位角。
【例题6-2】=3712232.528、=523620.436、=3712227.860、=523611.598,计算坐标方位角计算坐标方位角、水平距离。
=62°09'29.4"+180°=242°09'29.4"注意:一直线有两个方向,存在两个方位角,式中:、的计算是过A点坐标纵轴至直线的坐标方位角,若所求坐标方位角为,则应是A点坐标减点坐标。
坐标正算与反算,可以利用普通科学电子计算器的极坐标和直角坐标相互转换功能计算,普通科学电子计算器的类型比较多,操作方法不相同,下面介绍一种方法。
【例题6-3】坐标反算,已知=2365.16、=1181.77、=1771.03、=1719.24,试计算坐标方位角、水平距离。
任意曲线坐标放样正反算程序(fx-4800p)正算ZSLbl 0↙{K,L,Q,S}:K:L:Q:Prog“FXL”:Prog“SUB”↙“X=”:X=X:Pause0:Y=Y◢K=S+K↙Goto0↙反算FSLbl 0:{PT}:P“X0”:T“Y0”↙Lbl 1:{K}:L=0:Q=0:Prog“FXL”: Prog“SUB”↙U=I-90↙V=(T-Y)CosU-(P-X)SinU↙AbsV≥0.001=>K=K+V:Goto1:≠>“K0=”:K=K:Pause0:W“L0”=(T-Y)CosI-(P-X)SinI◢Goto0↙子程序SUBNorm↙Deg↙U=(E-D)÷Abs(G-F):V=Abs(K-F):W=UV↙J=C+90V(W+2D)÷π:J<0=>J=J+360⊿J≥360=>J=J-360⊿↙M=C+45V(W÷4+2D)÷(2π):N=C+135V(3W÷4+2D)÷(2π):O=C+45V(W÷2+2D)÷π↙I=J+Q↙Fix3↙X=A+V÷12×(CosC+4(CosM+CosN)+2CosO+CosJ)+L CosI↙Y=B+V÷12×(SinC+4(SinM+SinN)+2SinO+SinJ)+L SinI↙数据库FXLK≥0=>K≤1211.753=>A=9764.547:B=3344.148:C=142,6,26,:D=0:E=0:F=0:G=1211.753⊿⊿↙K≥1211.753=>K≤1406.455=>A=8808.279:B=4088.39:C=142,6,26,:D=1÷700:E=1÷700:F=1211.753:G=1406.455⊿⊿↙使用说明:K-里程桩号; A,B-每段线元的起点X,Y坐标; C-每段线元的起点的切线方位角; F-每段线元的起点桩号;G-每段线元的终点桩号;D-每段线元的起点半径曲率;E-每段线元的终点半径曲率; (左转取-1÷半径曲率,右转取1÷半径曲率,直线为下一个桩号(例: 赋值20确认,即上个桩号加20)D,E取值说明:当线元为直线段,不论其起,止与何线元相接, D,E都取0.当线元为圆曲线,不论其起,止与何线元相接, D,E都取(右偏)1/(左偏)-1÷该圆曲线的半径.当线元为缓和段, 起,止与直线相接, D,E都取0. 与圆曲线相接, D,E都取(右偏)1/(左偏)-1÷该圆曲线的半径. 与缓和段相接, D,E都取0.任意点的切线方位角C说明:编数据库时,若两曲线相接,例:先编ZH至HY段,运行算出HY点的切线方位角,(即求HY点的坐标,然后终止程序调出C值),然后再以计算出的C编HY至YH段.依此类推.反算桩号时需多次确认所输入的X,Y坐标,程序运算至桩号误差小于允许值时,会同时显示结果:K0-桩号,L0-距离.坐标反算程序:ZBFSC“X1”:D“Y1”:E“X2”:F“Y2”:Fixm:Pol(E-C,F-D:I“S=”◢J≤0=>J=J+360⊿J“J=”↙坐标正算程序ZBZSC“X1”:D“Y1”:L:O“J”:Fixm:X=C+Rec(L,O◢Y=D+J↙竖曲线SQXJ“BPD”:B“BPH”:C“I1”:D“I2”:RW=D-C◢A=W÷AbsW:T=Abs(0.5RW)◢L=2T↙E=T2÷2R◢X“QD”=J-T◢Y“ZD”=J+T◢Lbl1:P“K”:H=B+C(P-J)+A(P-J+T)2÷2R◢W“CONT”:W=1=>Goto1:≠>Goto2:⊿↙Lbl2↙说明:BPD-变坡点桩号BPH-变坡点高程I1-前一个坡度(上“+”,下“-”)I2-后一个坡度(上“+”,下“-”)R-半径E-外距QD-该竖曲线起点桩号ZD-该竖曲线终点桩号K-要求的桩号H-要求桩号的高程任意曲线坐标放样正反算程序(fx-4850p)正算ZSLbl 0↙{K,L,Q,S}:K:L:Q:Prog“FXL”:Prog“SUB”↙“X=”:X=X:Pause0:“Y=”:Y=Y◢K=S+K↙Goto0↙反算FSLbl 0:{PT}:P“X0”:T“Y0”↙Lbl 1:{K}:L=0:Q=0:Prog“FXL”: Prog“SUB”↙U=I-90↙V=(T-Y)CosU-(P-X)SinU↙AbsV≥0.001=>“K0=”:K=K+V:Goto1:≠>“K0=”:K=K:Pause0:W=(T-Y)CosI-(P-X)SinI ↙“L0=”:W=W◢Goto0↙子程序SUBNorm↙Deg↙U=(E-D)÷Abs(G-F):V=Abs(K-F):W=UV↙J=C+90V(W+2D)÷π:J<0=>J=J+360⊿J≥360=>J=J-360⊿↙M=C+45V(W÷4+2D)÷(2π):N=C+135V(3W÷4+2D)÷(2π):O=C+45V(W÷2+2D)÷π↙I=J+Q↙Fix3↙X=A+V÷12×(CosC+4(CosM+CosN)+2CosO+CosJ)+L CosI↙Y=B+V÷12×(SinC+4(SinM+SinN)+2SinO+SinJ)+L SinI↙数据库FXLK≥0=>K≤1211.753=>A=9764.547:B=3344.148:C=142,6,26,:D=0:E=0:F=0:G=1211.753⊿⊿↙K≥1211.753=>K≤1406.455=>A=8808.279:B=4088.39:C=142,6,26,:D=1÷700:E=1÷700:F=1211.753:G=1406.455⊿⊿↙使用说明:K-里程桩号; A,B-每段线元的起点X,Y坐标; C-每段线元的起点的切线方位角;D-每段线元的起点半径曲率;E-每段线元的终点半径曲率; (左转取-1÷半径曲率,右转取1÷半径曲率,直线为0. );L-距中桩距离(左负,右正,中桩为0); Q-与线路前进方向的右交角(正交为90); S-赋值加上一个桩号放下一个桩号(例: 赋值20确认,即上个桩号加20)D,E取值说明:当线元为直线段,不论其起,止与何线元相接, D,E都取0.当线元为圆曲线,不论其起,止与何线元相接, D,E都取(右偏)1/(左偏)-1÷该圆曲线的半径.当线元为缓和段, 起,止与直线相接, D,E都取0. 与圆曲线相接, D,E都取(右偏)1/(左偏)-1÷该圆曲线的半径. 与缓和段相接, D,E都取0.任意点的切线方位角C说明:编数据库时,若两曲线相接,例:先编ZH至HY段,运行算出HY点的切线方位角,(即求HY点的坐标,然后终止程序调出C值),然后再以计算出的C编HY至YH段.依此类推.反算桩号时需多次确认所输入的X,Y坐标,程序运算至桩号误差小于允许值时,会同时显示结果:K0-桩号,L0-距离.任意曲线坐标放样正反算程序(fx-4800p)任意曲线坐标放样正反算程序(fx-4850p)。
坐标正反算计算程序```pythonimport mathdef coordinate_forward(h0, l0, alpha, s):"""坐标正算函数,根据给定的起始位置和观测角度、距离计算目标位置的坐标。
:param h0: 起始位置的水平坐标。
:param l0: 起始位置的纵向坐标。
:param alpha: 观测角度,以正北方向为基准,顺时针方向为正。
:param s: 距离。
:return: 目标位置的水平坐标和纵向坐标。
"""d = math.radians(alpha)h = h0 + s * math.sin(d)l = l0 + s * math.cos(d)return h, ldef coordinate_inverse(h0, l0, h, l):"""坐标反算函数,根据给定的起始位置和目标位置的坐标计算观测角度和距离。
:param h0: 起始位置的水平坐标。
:param l0: 起始位置的纵向坐标。
:param h: 目标位置的水平坐标。
:param l: 目标位置的纵向坐标。
:return: 观测角度和距离。
"""dh = h - h0dl = l - l0s = math.sqrt(dh ** 2 + dl ** 2)alpha = math.degrees(math.atan2(dh, dl))if alpha < 0:alpha += 360return alpha, s```使用这个坐标正反算计算程序,可以简单地实现坐标的正反算。
例如:```python#坐标正算示例h0=0l0=0alpha = 45s=10h, l = coordinate_forward(h0, l0, alpha, s)print(f"目标位置坐标:h={h}, l={l}")#坐标反算示例h0=0l0=0h=5l=5alpha, s = coordinate_inverse(h0, l0, h, l)print(f"观测角度和距离:alpha={alpha}, s={s}")```这段程序中的坐标正算函数`coordinate_forward`接受起始位置的坐标`h0`和`l0`,观测角度`alpha`(以正北方向为基准,顺时针方向为正),以及距离`s`作为参数,返回目标位置的水平坐标`h`和纵向坐标`l`。
5800计算器全线坐标计算放样正反算程序(定稿)彭赐明主程序坐标正反算程序名称:ZBZFSLB1 A↙Cls : Fix 4 : 30→Dim Z :"0=ZS,1=FS"?Z ↙If Z=0:Then Goto B:IfEnd↙(Z=0进入里程点坐标正算)If Z=1:Then Prog"FSLCBZ ": Goto A:IfEnd↙(Z=1进入反算里程边桩)Lb1 B ↙“K=”?K :(计算里程)Prog"SJK1 ":Prog”ZBFY” :Goto A↙子程序数据库 SJK1IF K<本段曲线终点里程 AND K≥上段曲线终点里程:THEN 本段终点里程→Z[1] : 上段曲线终点里程→Z[2] :1→O(注:左偏曲线输入-1→O,右偏曲线输入1→O): 半径→R : 曲线偏角→A:第一缓和曲线→Z[6] : 第二缓和曲线→Z[7] : 交点X→B :交点Y→C : 小里程向交点方位角→E : 交点向大里程方位角→F : Prog”XLZBJSCX”:Return: IFEND↙IF…………Prog”XLZBJSCX”:Return:IFEND(曲线段分段输入)↙补充直线段输入如下(单独直线段)IF K<本段直线终点里程AND K≥本段直线起点里程:THEN 本段直线终点里程→Z[3]:终点X→Z[16]:终点Y→Z[17]:方位角→E: Z[16]+ (K- Z[3])*COS E→Z[18]:Z[17]+ (K- Z[3])*SIN E→Z[19] : Return:IFEND子程序坐标正算,名称:XLZBJSCXLB1 2 ↙(曲线要素计算)Z[6]/2- Z[6]^3/(240*R^2)+ Z[6]^5/(34560*R^4) →Z[8] ↙(M1)Z[7]/2- Z[7]^3/(240*R^2)+ Z[7]^5/(34560*R^4) →Z[9] ↙(M2)Z[6]^2/(24*R)- Z[6]^4/(2688*R^3) →Z[10] ↙(P1)Z[7]^2/(24*R)- Z[7]^4/(2688*R^3) →Z[11] ↙(P2)π*A*R/180+0.5*( Z[6]+ Z[7])→Z[25] ↙(曲线总长)90* Z[6]/(R*π) →Z[14] ↙(第一缓和曲线总偏角)90* Z[7]/(R*π) →Z[15] ↙(第二缓和曲线总偏角,可以省略)Z[8]+(R+Z[10])TAN(A/2)-(Z[10]-Z[11] )/SIN A→Z[12]↙(切线T1)Z[9]+(R+Z[11])TAN(A/2)+(Z[10]-Z[11] )/SIN A→Z[13]↙(切线T2)B+ Z[12]*COS (E+180)→ Z[16] ↙(ZH点X)C+ Z[12]*SIN(E+180)→ Z[17] ↙(ZH点Y)Z[1]- Z[25]→Z[3] ↙(ZH点里程)Z[3]+ Z[6]→Z[4] ↙(HY点里程)Z[1]- Z[7]→Z[5] ↙(YH点里程)GOTO 3 ↙LB1 3 ↙(判断里程点与曲线关系)IF K≤Z[3] AND K> Z[2] : THEN GOTO 4 : IFEND ↙IF K≤Z[4] AND K> Z[3] : THEN GOTO 5 : IFEND ↙IF K≤Z[5] AND K> Z[4] : THEN GOTO 6 : IFEND ↙IF K≤Z[1] AND K> Z[5] : THEN GOTO 7 : IFEND ↙LB1 4 ↙(里程小于直缓点直线独立坐标)K- Z[3] →Z[23] : 0→Z[24] : E→T : GOTO 8↙LB1 5 ↙(第一缓和曲线独立坐标)K- Z[3] →H ↙H-H^5/(40*R^2* Z[6]^2)+H^9/(3456*R^4* Z[6]^4) →Z[23] ↙H^3/(6*R* Z[6])-H^7/(336*R^3* Z[6]^3) →Z[24] ↙90*H^2/( R*π* Z[6]) →T ↙IF O>0 :THEN T +E→T : ELSE E-T →T : T<0=>360+T→T : IFEND ↙GOTO 8 ↙LB1 6 ↙(圆曲线独立坐标)K- Z[4] →H ↙H*180/( R*π)+ Z[14]→T ↙R*SIN T+ Z[8]→Z[23] ↙R*(1-COS T)+ Z[10]→Z[24] ↙IF O>0 :THEN T +E→T : ELSE E-T →T : T<0=>360+T→T : IFEND ↙GOTO 8 ↙LB1 7 ↙(第二缓和曲线独立坐标)Z[1] -K →H ↙H-H^5/(40*R^2* Z[7]^2)+H^9/(3456*R^4* Z[7]^4) →U↙H^3/(6*R* Z[7])-H^7/(336*R^3* Z[7]^3) →V ↙90*H^2/( R*π* Z[7]) →T ↙Z[13]COS A+ Z[12]-U*COS A-V*S IN A→Z[23] ↙Z[13]*SIN A-U*SIN A+V*COS A→Z[24]↙IF O>0 :THEN F-T→T : T<0=>360+T→T : ELSE F+T →T : IFEND ↙GOTO 8 ↙LLb1 8IF O<0 : THEN - Z[24]→Z[24] : IFEND ↙Z[16]+Z[23]*COS E-Z[24]*SIN E→Z[18] ↙Z[17]+Z[23]*SIN E+Z[24]*COS E→Z[19] ↙ReTurn↙子程序反算里程边桩,名称:FSLCBZLb1 1↙"XK="?X:"YK="?Y↙(输入任意测点的XY坐标):“K=”?K (试算里程,任意输入标段内里程点即可,也可以输入大致的估算里程加快速度)↙Lb1 2↙Prog"SJK1 ":T-90 →W:W<0=>360+W→W:Abs((Y-Z[19])*Cos W-(X-Z[18])*Sin W)→S↙If S<0.0001:Then Goto 4:Else Goto 3:Ifend↙Lb1 3↙K+S→K: Prog"S JK1":T-90 →W:W<0=>360+W→W:Abs((Y-Z[19])*Cos W-(X-Z[18])*Sin W)→Q↙If Q<0.0001 :Then Q→S: Goto 4:Else IF Q<S: THEN K+Q→K: Goto 2 :Else IF Q>S :THEN K-Q→K:G oto 2:Ifend:Ifend:Ifend↙Lb1 4↙Pol (X-Z[18],Y-Z[19]:"DP(-Z+Y)=":I◢(偏距)(由于该程序不能准确判断边桩左右方向,暂作修改,取消左右边判定)"K=":K+S→K◢(里程)Return↙子程序坐标放样:ZBFYLB1 0 ↙“XHS="?G(后视点X):"YHS="?L(后视点Y):"XZJ="?M(置镜点X):"YZJ="?N(置镜点Y):Pol(G-M,L-N):"DH=":I(后视距)◢J<0=>J+360→J:"FH=":J→DMS◢(后视方位角) “QXJ=” :T◢(计算里程点切线方位角,可以不显示)“XI=” : Z[18] ◢(中线X)“YI=” : Z[19] ◢(中线Y)Pol(Z[18]-M,Z[19]-N):"DI=":I(中桩放样距)◢J<0=>J+360→J:"FI=":J→DMS◢(中桩放样方位角)“PJ=”?P◢(输入边桩与线路夹角,左-右+)“PD=”?D◢(输入边桩距)Z[18]+D*COS(T+P) →Z[20] ↙Z[19]+D*SI N(T+P) →Z[21] ↙“XP=”: Z[20] ◢(边桩X)“YP=”: Z[21] ◢(边桩Y)Pol(Z[20]-M,Z[21]-N):"DP=":I◢(边桩放样距)J<0=>J+360→J:"FP=":J→DMS◢(边桩放样方位角)Return↙。
高斯正反算程序
高斯正反算程序是一种用于计算地理坐标和直角坐标之间转换的程序。
它基于高斯投影原理,将地球表面上的点投影到平面上,实现地理坐标和直角坐标之间的转换。
高斯正算程序是将地理坐标(经度和纬度)转换为直角坐标(X 和Y)的程序。
其计算步骤包括:
1. 将经度和纬度转换为弧度;
2. 计算经度余弦、纬度正弦和纬度余弦;
3. 计算X和Y坐标。
高斯反算程序是将直角坐标(X和Y)转换为地理坐标(经度和纬度)的程序。
其计算步骤包括:
1. 计算X和Y坐标的平方和;
2. 计算平方差;
3. 计算经度和纬度的弧度值;
4. 将弧度值转换为度数。
以上是高斯正反算程序的基本步骤,具体的计算公式和细节可能因不同的投影方法和地区而有所不同。
在实际应用中,需要根据具体情况选择合适的投影方法和参数进行计算。
(以下程序是专业人士编写,本店铺不对程序负责,仅供您参考使用。
)卡西欧fx5800p计算器坐标正反算程序一、程序功能本程序由 6 个主程序、 5 个次子程序及 5 个参数子程序组成。
主要用于公路测量中坐标正反算,设计任意点高程及横坡计算 , 桥涵放样,路基开挖口及填方坡脚线放样。
程序坐标计算适应于任何线型 .二、源程序1. 主程序 1 :一般放样反算程序(① 正算坐标、放样点至置仪点方位角及距离;② 反算桩号及距中距离 )程序名 :1ZD-XYLb1 0:Norm 2F=1 : ( 正反算判别, F=1 正算, F=2 反算 , 也可以改 F 前加?,改 F 为变量 )Z[1]=90 (与路线右边夹角)Prog " THB ": F=1=>Goto 1:F=2=>Goto 2Lb1 1: F ix 3: "X = ": Locate 6,4, X◢"Y=": Locate 6,4, Y◢P rog "3JS”:Goto 0:Lb1 2:Fix 3: "KM=": Locate 6,4, Z◢"D=": Locate 6,4, D◢G oto 02.主程序2:高程序横坡程序 ( 设计任意点高程及横坡 )程序名: 2GCLbI 0:Norm 2“KM”?Z:?D:Prog”H”:Fix 3:” H=”:Locate 6,4,H◢“ I=”: Locate 6,4,I◢Goto 03. 主程序 3 :极坐放样计算程序 ( 计算放样点至置仪点方位角及距离 )程序名: 3JSX : Y :1268 .123→K( 置仪点 X 坐标 )2243 .545→L (置仪点 Y 坐标,都是手工输入 , 也可以建导线点数据库子程序 , 个人认为太麻烦)Y-L→E : X-K→F : Pol(F,E):IF J<0:ThenJ+360→J:Int(J)+0.01Int(60Frac(J))+0.006Frac(60Frac(J)) →J:( 不习惯小数点后四位为角度显示的,也可以用命令J◢DMS◢ 来直接显示) Fix 4:” FWJ=”: Locate 6,4,J◢( 不习惯小数点后四位为角度显示的,也可以用命令J◢DMS◢ 来直接显示 )Fix 3:” S=”:Locate 6,4,I◢4 .主程序 4 :涵洞放样程序(由涵中心桩号计算出各涵角坐标、在主程序 3 中输入置仪点坐标后计算放样点至置仪点方位角及距离 )程序名: 4JH-XYLbI 0:Norm 290→Z[1]( 涵洞中心桩与右边夹角,手工输入,也可以修改成前面加?后变为变量 )1→F:Prog”THB”:?L:Z[2]-Z[1] →E:X+Lcos(E) →X:Y+Lsin(E) →Y:Fix 3: "X = ": Locate 6,4, X◢"Y=": Locate 6,4, Y◢P rog "3JS”:Goto 0:5 .主程序 5: 路基开挖边线及填方坡脚线放样程序(输入大概桩号及测量坐标、地面标高计算出偏移距离、桩号、距中距离、填挖高度)程序名: 5FBXLbI 0:Norm 2: 18→DimZ:2→F:90→Z[1]:Prog“THB”:Z:D:”M0”?M:M→Z[4]:D→Z[3]:Prog”6GD”:L→Z[6]:If D<0:Then 0.75-L→D:Goto H:Else L-0.75→D:Goto H:IfEndLbI H:Prog”H”:H-0.03-Z[4] →Z[5]:Z[6] →L:If Z[5]<0:Then –z[5]→G:Goto W:Else Z[5] →G:Goto T:LbI W:Prog “W0”:Z[10]+Z[11] →A: If G>A:Then Goto 1:Else IfG>Z[10]:Then Goto 2:Else Goto 3:IfEnd:LbI 1:L+Z[12]+Z[13]+Z[14]+(G-A)×Z[9]+Z[11]×Z[8]+Z[10]×Z[7]:Goto Z: LbI 2:L+Z[12]+Z[13]+(G-Z[10])×Z[8]+Z[10]×Z[7]:G oto Z:LbI 3:L+Z[12]+G×Z[7]:Goto z:LbI T:L+0.5→N:If G>Z[17]:Then(N+Z[18]+(G-Z[17])×Z[16]+Z[17]×Z[15])→S:Goto Z:Else(N+G×Z[15])→S:Goto z:LbI Z:Z[3]→D:Fix 2:Abs(D)-S→T:” L0=”:L Locate 6,4,T◢"KM=": Locate 6,4, Z◢"D=": Locate 6,4, D◢“ TW=”: Locate 6,4,Z[5]◢Goto 06 .主程序 6 :路基标准半幅宽度计算程序 ( 对于设计有加宽渐变的有用,如路基宽度无变化,则把此程序直接输入半幅宽度值至 L)程序名: 6GDProg “G0”Z-C→E:(B-A)×E/S+A→L:L:7 .坐标计算次程序(THB)程序名: THB18→DimZ :"KM" ?Z : Prog "X0"1÷P→ C: (P-R)÷(2HPR) → S:180÷π→ E:F =1=>Goto 1 :F=2=>Goto 2←┘Lbl 1 : ? D: Abs( Z-O) →W : Prog " A " : X :Y:G oto 3 LbI 2: X:Y:X→I :Y→J : Prog "B":O+W→Z :D→ D:G oto 3LbI 3:IF F=1 Then X:Y: Else Z:D8. 正算子程序 ( A )程序名: A0.25→A :0.52→B :0.44→N 0.0→K :0.49→L :0.5→M :U+W(Acos(G+QEKW(C+KW S ))+Bcos(G+QELW(C+LW S ))+Ncos(G+QEMW(C+MWS ))+Bcos(G+QE(1-L)W(C+(1-L)WS))+Acos(G+QE(1-K)W(C+(1-K)WS))) →X :V+W(Asin(G+QEKW(C+KW S ))+Bsin(G+QELW(C+LWS ))+Nsin(G+QEMW(C+MWS))+Bsin(G+QE(1-L)W(C+(1-L)WS))+Asin(G+QE(1-K)W (C+(1-K)W S))) →Y :G+QEW(C+W S )+ Z[1]→ Z[2]: X+ D cos (Z[2])→ X: Y+ D sin (Z[2])→ Y9. 反算子程序 ( B )程序名: BG-90→ T: Abs((Y-V)cos(T)-(X-U)sin(T)) → W:0→ D: Lbl 0 : Prog " A " : T+QEW(C+W S) → L: (J-Y)cos(L)-(I-X)sin(L)→ D: IF Abs( D )<0.01:Then Goto1 : Else W+ D→W:Goto 0←┘Lbl 1:0→D : Prog " A " : (J-Y)÷sin( Z[2]) →D:10 .高程计算子程序( H )程序名: HProg “S0”:R:T:C:G:I:C-T→F:Z-F→L:C+T→E:G-TI→Q:If T=O:ThenQ+LI→H:Goto 0:Else If Z<F:Then Q+LI→H:Goto 0:Else If Z≤E:ThenQ+LI+L2÷2÷R→H:Goto 0:LbI 0:H:If D=0:Then Goto I:Else Prog “I”:H+V→H:Goto I:LbI I:H:I: 11. 高程超高计算程序( I )程序名: IProg”I0”:W=1=> Goto 0:W=2=>Goto 1:LbI 0:If L=0:Then Abs(D)×M→V:Goto 2:ElseAbs(D)×((N-M)×(Z-C)÷L+M)→V:Goto 2:IfEnd:LbI 1:If L=0:Then Abs(D)×M→V:Goto 2:ElseAbs(D)×(((3((Z-C)÷L)2-2((Z-C)÷L)∧(3))×(N-M))+M)→V:Goto 2:IfEnd: LbI 2:Abs(D)→E:V÷E→I:I(E-K)→V:12 .数据子程序 ( 附后示例 )① 程序名: X0 (坐标计算要素程序)If Z≥25900 And Z≤26615.555:Then25900→O:11587.421→U:1847.983→V:101 。
坐标正反算及超欠挖程序主程序(ZBZFS) "1.SZ => XY":"2.XY => SZ":?N: If N=3:Then Goto 3:IfEnd If N=4 :Then Prog "0-ZZZB": IfEnd "K(L)= "?S:Prog "SJ-PM" 1÷P→C:(P-R) ÷(2HPR)→D:180÷π →E:If N=1:Then Goto 1:Else Goto 2:IfEnd Lbl 1:"s"?s:"z"?z:Abs(S-O)→W:Prog "SUB1":"XS=":X→X◢ "YS=":Y→Y◢ "FS=":F-90→F:F►DMS◢ Goto 1←┘ Lbl 2: "X"?X: "Y"?Y:X→I:Y→J:Prog "SUB2":"S=":O+W→S◢ "Z=":Z→Z◢ "MS:M=1,2"?B: If B=1:Then Prog "SDCQW": IfEnd:Goto 2 LbI 3 "X0"?U: "Y0"?V: "S0"?O: "F0"?G: "LS"?H: "R0"?P: "RN"?R: "Q"?Q: Goto 2: IfEnd: Goto 3 使用说明 数据库主要输入整条线路的曲线要素,再输入完成的情况下,选择正反算,按 1 正算,输入 要算的里程判断你要算的里程在那段曲线要输里面, 如 412348, 然后输入计算里程和偏距, 就可以算出改里程的坐标。
卡西欧5800程序完整版"ZS=1,FS=2"?N: 1÷P →C:(P-R)÷(2HPH)→D:180÷π→E: If N=1: Then Goto 1: Else Goto 2: IfE nd←┚LbI 1:1 →I:0 →Z:Abs(K-O) →W: Prog"ZS"←┚F-90→F←┚"JJ"?K:"PJ"?L: "ZX=":X+Lcos(F+K) →Z[3]◢"ZY=": Y+Lsin(F+K) →Z[4]◢"QXFWJ=":F DMS◢Abs(Z) →Z:Goto 8←┚LbI 2:"X"?I:"Y"?J: Prog"FS":"FSZH=":O+W→K◢"FSJL=":Z◢Lbl 8正算子程序(ZS)(不运行)1÷P→C:(P-R)÷(2HPR) →D: 180÷π→E←┚0.1739274226→A:0.3260725774→B:0.0694318442→K:0.3300094782→L:1-L→F:1-K→M:U+W(Acos(G+QEKW(C+KWD))+Bcos(G+QELW(C+LWD))+Bcos(G+QEFW(C+FWD))+Acos(G+QEMW(C+MWD)))→X:V+W(Asin(G+QEKW(C+KWD))+Bsin(G+QELW(C +LWD))+Bsin(G+QEFW(C+FWD))+Asin(G+QEMW(C+MWD)))→Y:G+QEW(C+WD)+90→F:X+ZcosF→X:Y+ZsinF→Y3反算子程序(FS)(不运行)G-90→T:Abs((Y-V))cos(T)-(X-U)sin(T)→W:0→Z←┚Lbl 0←┚prog"ZS":T+QEW(C+WD)→L:(J-Y)cosL-(I-X)sinL→Z:If Abs(Z)<0.001: Then Goto1:E lse W+Z→W:IfEnd :Goto 0←┚Lbl 1:0→Z:Prog"ZS":(J-Y)÷sinF→ZZX-WN(运行主程序,该程序适用于匝道,对全段完整非对称曲线计算太过麻烦)"CZX"?S(仪站X坐标):"CZY"?W(仪站Y坐标)LbI 0: "K"?K: If K≤126.9(第1条单一曲线的终点下面同上): Then Goto A:Else If K≤176.9 And K>126.9: Then Goto B:Else If K≤259.562 And K>176.9: Then Goto C:Else If K≤309.562 And K >259.562: Then Goto D:IfEnd:IfEnd:IfEnd:IfEnd←┚LbI A:92094.336(起点X坐标)→U:8287.962(起点Y坐标)→V:0起点桩号→O:145°11'54"(方位角)→G:126.9(曲线长度)→H:10^(45) (起点半径)→P:10^(45) (止点半径)→R:+1(路线左右偏,左负右正,直线输0)→Q:Prog "WN":Goto WLbI B:91990.134→U:8360.388→V:126.9→O:145°11'54"→G:50→H:10^(45) →P:150 →R:+1→Q:Pr og "WN":Goto WLbI C:91947.609→U:8386.570→V:176.9→O:154°44'51"→G:82.662→H:150 →P:150 →R:+1→Q:Pr og "WN":Goto WLbI D:91867.101→U:8399.992→V:259.562→O:186°19'19"→G:50→H:150 →P: 10^(45) →R:+1→Q: Prog "WN":Goto WLbI W:"PJ1"?T←┚(该项是只左右边桩再左右偏距,输0为不再左右偏,可以直接出方位角、距离,适用于桥梁桥台、盖梁、涵洞八字墙等放样,以路线前进方向,前-,后+)If T=0:Then Z[3]→Z: Z[4]→M: Goto P: Else Goto V: IfEnd←┚LbI V:"JJ1"? O←┚(左右边桩再偏夹角,用180°减去路线夹角)"X1=": Z[3]+Tcos(F+N+ O)→U◢"Y1=":Z[4]+Tsin(F+N+ O)→V◢U→Z: V→M: GotoP←┚LbI P:Pol(Z-S,M-W): If J≤0:Then J+360°→J: IfEnd←┚"JL=":I◢(仪站至测点的距离)"FWJ=":J DMS◢(仪站至测点的方位角)Goto0备注:1.规定以道路中线前进方向(即里程增大的方向)区分左右;当线元往左偏时Q=-1;当元线往右偏时,Q=1:当元线为直线时,Q=0。