坐标正反算程序计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、
Lbl 3:"1→ZS,2→FS"?Q
Q=1=>Goto 1:Q=2=>Goto 2
Lbl 1:"CE:X"?M:"CE:Y"?F:"JL"?L:"FWJ"?A:Rec(L,A):M+I→C:F+J→D
Cls
"X=":Locate 3,1,C:"Y=":Locate 3,2,D◢
Goto 3
Lbl 2::"CE:X"?G:"CE:Y"?H:"(HOU)FY:X"?N:"(HOU)FY:Y"?E
Pol(N-G,E-H)
If J<0:Then J+360→Y:Else J→Y:IfEnd
Cls
"FY JL=":Locate 10,1,I:"FY FWJ=":Y◆DMS◢
Goto 3
进入程序运行如下:
1→ZS,2→FS? 输入1为正算,2为反算.
以输入1为例:
CE:X? 测站点X(5796.717)
CE:Y? 测站点Y(5212.569)
JL? 仪器测得的距离(321.889)
FWJ? 仪器测得的方位角(193-41-07)
得到:X=5483.966
Y=5136.414
再按EXE,输2为例:
CE:X? 测站点X(5796.717)
CE:Y? 测站点Y(5212.569)
(HOU)FY:X? 后视或放样的X(5483.966)
(HOU)FY:Y? 后视或放样的Y(5136.414)
得到:FY JL=321.889
FY FWJ=193-41-6.79
二、
Deg : Fix 3 : “XZ→0:YZ→1”?A : If A = 1: Then Goto 1 : IfEnd ↙
If A = 0 : Then “BS→0:XY→1:AND→2:DK→3:L(I)→4 ”?O : IfEnd ↙
If O = 4: Then Goto 1 : IfEnd ↙
If O = 3: Then Prog “F.2 ”: If X= 0 : Then Goto 1 : IfEnd : IfEnd ↙
If O≠1: Then “X1 ”?X : “Y1”?Y : X→Z[11]: Y→Z[12]: “X2 ”?P : “Y2”?Q : Pol( P-X , Q-Y) : If J﹤0 : Then J + 360→J : IfEnd : Cls : “S12= ”: Locate 6 ,1, I : “B12= ”: J ►DMS◣
1→B : IfEnd ↙
If O = 1: Then “XY(0) →0: ≠﹥1”? B: IfEnd ↙
Lbl 1 : If A = 1 And O = 3 :Then Prog “F.2 ”: IfEnd : Prog “Q.1 ”
子程序PPQX (给定综合曲线属性)
“ZQX →0: *** →1: *** →2 ******* ”?C ↙
If C=0: Then 100→Z[98]: n0 →Z[99]: IfEnd ↙
If C=1: Then m1→Z[98]: n1 →Z[99]: IfEnd ↙
If C=2: Then m2→Z[98]: n2 →Z[99]: IfEnd ↙
*******
Prog “PQX ”
其中: mi为第i条综合曲线矩阵变量起始单元,(第1条综合曲线矩阵变量起始单元应自100开始,以便其他程序临时使用100以前的矩阵变量,综合曲线中每一基本单元需8个矩阵存储单元);ni为第i条综合曲线中基本单元数,每增加一个条综合曲线则增加一行If C=*******→Z[99]: IfEnd↙语句。
还应注特别意,原有程序中的矩阵变量定维语句DimZ应取消,只要原有程序中的矩阵变量定维不大于100,原有程序的运行不受影响。
子程序Q . 5 (建立数据库)
Deg : Fix 5 ↙
0→I : “N ”? W : W →Z[99]: “Z[MIN]”? V : V→Z[98]↙
Lbl 1 : “NO.I= ”: I ◣
Lbl C : V + 8 I→G ↙
“→DK ”?A : A→Z[G]↙
“→X ”?B : B→Z[G + 1]↙
“→Y ”?C : C→Z[G +2]↙
“→AT ”?D : D→Z[G +3]↙
“→(-1Y+1) ”?K : K→Z[G +4]↙
“→L ”?E : E→Z[G +5]↙
“→R1 ”?F : F→Z[G +6]↙
“→R2”?O : O→Z[G +7]↙
Lbl 2 : “JX→1: NO→0 : OK→2”? M : If M = 2 : Then Goto 3 : IfEnd : If M = 1: Then Goto C : IfEnd ↙
I + 1→I : Goto 1 ↙
Lbl 3 : “END ”
子程序Q . 6
Lbl 1 : “S ”? W : If W = 0 : Then Goto 2 : IfEnd ↙
I-W→W : Cls : “⊿S= ”: Locate 5 , 1 , W : “BP= ”: J ►DMS◣
Goto 1 ↙
Lbl 2 : Cls : “OK ”
子程序Q.1
If X = 0 And O = 3 : Then Goto 2 : IfEnd ↙
Lbl 1 : Z[98]→I : Z[99]→J : “→DKP ”? S ↙
If S = -1: Then Prog “JH . ZJ ”: Goto 1 : IfEnd ↙(加桥台转轴时)
If S = -2: Then Prog “ZH . 2 ”: Goto 1 : IfEnd ↙(加涵通转轴时)
If S = 0: Then Goto 2 : IfEnd : If S﹤Z[I ]: Then “DKP<MIN ”◣
Goto 1 : IfEnd : If S > Z[I + 8 J ]: Then “DKP>MAX ”◣
Goto 1 : IfEnd ↙
If O≠4 And B ≠0 : Then “→B ”? V : V : Prog “J ”: T→U : “→(-+)D ÷2 ” ? N : Else 0 →N : IfEnd ↙
Prog “Q.2 ”: Goto 1 ↙
Lbl 2 : “END ”
子程序Q . 2
If O≠3 : Then “→”: IfEnd ↙
0→I : Z[98]+ 8 →M ↙
If S ≥Z[M-8 ]And S ≤Z[M ]:Then Goto 1 : IfEnd ↙
Lbl 2 : I +1 →I : M + 8 →M ↙
If S ≤Z[M ]:Then Goto 1 : Else Goto 2 : IfEnd ↙
Lbl 1 : If O = 3 : Then I →B :IfEnd : M→Z[27]: If O≠4 : Then Prog “Q. 3”: Else “L(I) , I = ”: I ◣
Cls : “MIN = ”: Locate 6 , 1 , Z[Z[98]+8 I ]: “MAX = ”: Locate 6 ,2 , Z[Z[98]+8 I +8]:I→B : IfEnd ↙
子程序Q . 3
If O = 3 And U = 0 : Then B→I : IfEnd ↙
Z[98]+8 I →G ↙
Z[G]→Z ↙
Z[G +1]→Z[1]: Z[G +2]→Z[2]: Z[G +3]→Z[3]↙
Z[3]:Prog “J ”: T→Z[3]↙
Z[G +4]→Z[4]: Z[G +5]→M : 1÷Z[G +6]→Z[5]: 1÷Z[G +7]→Z [6]↙
Z[6]-Z[5]→Z[6]: S-Z→D ↙
If O = 3 : Then 0→N : IfEnd : Prog “Q . 4 ”↙
子程序Q .4 (正算)
Lbl 0 : 0→I : 0→E:0→F : 0→G : 0→H ↙
Lbl 1 : I + 1→I : Z[3]+ Z[4]( ( I D÷12) ( Z[5]+ I D Z[6]÷24÷M ) ( 180÷л) →W : If I ﹤12: Then If Frac ( I÷2 ) ﹥0 : Then E + cos ( W ) →E : F + sin ( W ) →F : Else G + cos ( W ) →G : H + sin ( W ) →H : IfEnd : IfEnd ↙
If I ﹤12 : Then Goto 1:IfEnd ↙
Z[1]+(D÷36)( cos ( Z[3]) + cos ( W ) + 2G + 4E ) + N cos ( U + W ) →P ↙
Z[2]+(D÷36)( sin ( Z[3]) + sin ( W ) + 2H + 4F ) + N sin ( U + W ) →Q ↙
If O = 3 : Then Goto 2 : IfEnd ↙
If O≠0 : Then Cls : “XP = ”: Locate 5 , 1 , P : “YP = ”: Locate 5 , 2 , Q : “AT = ”: W►DMS◣
IfEnd ↙
Z[27]→I : If Z[I]-S = 0 And Z[I + 1]= 0 And N = 0 : Then P →Z[I + 1]: Q→Z[I + 2]: W : Prog “H ”: T→Z[I +3]: IfEnd ↙
If O≠1: Then Pol( P-Z[11], Q-Z[12]) : If J < 0 : Then J+360→J : IfEnd : Cls : “SP= ”: Locate 5 , 1 , I : “BP= ”: J ►DMS◣
Prog “Q. 6 ”: IfEnd ↙
Lbl 2
子程序F . 2 (反算)
“ZH.D(LI) →0 : NO→1”? U ↙
Lbl 2 : If U = 0 : Then “I ”? B : IfEnd ↙
Z[98]+ 8 Z[99]→M ↙
If X = 0 : Then Z[13]→X : IfEnd : “X ”? X : If X = 0 : Then Goto 3 : IfEnd ↙“Y ”? Y : 1 →Z[8]↙
“=〉”↙
If U = 1 : Then -√( ( X-Z[M + 1]) ²+ (Y-Z[M +2]) ²) →Z[7]: Z[7]+Z[M]→S : Prog“Q . 2”: IfEnd ↙
Z[98]+ 8 B→M : Z[M +3]: Prog“J ”: T-90→T ↙
( Y-Z[M +2]) cos (T) -( X-Z[M + 1]) Sin (T) →Z[7]↙
If U =1 And Abs ( Z[7]) ≤0.01: Then -0.01 →Z[7]: IfEnd ↙
Z[7]→D : Z[M]+ D →S :
If S > Z[M +8]: Then Z[M +8]→S ; IfEnd ↙
If U = 0 : Then Prog“Q . 3”: Else Prog“Q . 2”: IfEnd ↙
“=〉”↙
Lbl 1 : ( Y-Q ) cos (W-90)-(X-P) sin (W-90) →Z[8]↙
Z + Z[7]+ Z[8]→S↙
If Abs ( Z[8]) ≥0.0001: Then Z[7]+ Z[8]→D : Prog“Q .4”: D→Z[7]: Goto 1: IfEnd ↙
If U =1: Then If S + 0.01< Z : Then “DKP≠”: S ◣
If B< Z[99]-1 : Then B-1→B : Z[Z[98]+ 8B ]→I : Z→J : Else Z→I : Z[Z [98]+ 8 Z[99]]→J : IfEnd : “L(I)= ”: B ◣
Cls : “MIN= ”: Locate 6 , 1 , I : “MAX= ”: Locate 6 , 2 , J : “END, =〉ZH.D(LI)”◣
X →Z[13]: 0→X : 3→O: Goto 3 : IfEnd: IfEnd ↙
If U =0: Then If S< Z-0.01 : Then “DK<MIN,L→(I-1) ”◣
Goto 2 : IfEnd : If S> Z[Z[98]+ 8(B+1) ]+ 0.01: Then “DK>MAX , L→(I+1) ”◣
Goto 2 : IfEnd : IfEnd ↙
Cls : “DKP=”: Locate 6 ,1, S : X-P→P : If P =0: Then ×10-9→P : IfEnd : Pol( P , Y-Q) : If sin(W-J)>0: Then -I→I : IfEnd : “D÷2= ”: Locate 6 , 2, I : Goto 2↙
Lbl 3
子程序J
Ans ÷. 36 -16 ( Int ( Ans ) ) ÷9-Int (100 (Ans-Int (Ans ) ) )÷90→T
子程序H
. 6 4 Int ( Ans )+. 36 Ans + . 004 Int ( ( 60 ( Ans-( Int (Ans ) ) →T
为了实现桥台转轴坐标计算,现(2009.04.19)加一个子程序如下:
子程序JH . ZJ (桥台转轴)
“=〉B ”? V : V : Prog“J : W + T→T ↙
Lbl 1 : “=〉(-Y +) D ”? N : N = 0 =〉Goto 2 : “=〉(-→+) S ”? S↙
Pol(N , S ) : Rec( I ,T-J ) ↙
Cls : “X = ”: Locate 6, 1 , I + P : “Y = ”: Locate 6 , 2 , J + Q ◣
Goto 1 ↙
Lbl 2 : “OK ”◣
在子程序Q.1 中语句Lbl 1 : Z[98]→I : Z[99]→J : “→DKP ”? S ↙后加
If S = -1: Then Prog “JH . ZJ ”: Goto 1 : IfEnd ↙(加桥台转轴时)就可以了,(2009.04.19以加,见绿色标注语句。
桥台(桩基)转轴直角坐标计算运行提示符
直角坐标放样令DKP=-1时,转向桥台(桩基)转轴直角坐标计算
提示符说明
以上一测点中桩为中心作偏转
=〉B ? 问转轴偏角(以小数点为度)
=〉(-Y + ) D? 问偏距(与直角坐标放样时意义一致)。
赋值0时转向OK
=〉(-→+ ) S? 问支距(小里程方向为-,大里程方向为+)
X= 给出点位纵坐标
Y= 给出点位横坐标
OK 本转轴各点计算结束,返回直角坐标放样。
子程序ZH . 2 (涵通转轴)
“=〉B ”? V : V : Prog“J”: W + T→T
Lbl 1 : “=〉(-→+) K ”? S : S = 0 =〉Goto 2 : “=〉(-Y +) D ”? N ↙N Cos ( T) + P →X : N Sin ( T) + Q→Y ↙
Cls : “X = ”: Locate 6, 1 ,S Cos( W ) + X : “Y = ”: Locate 6 , 2 , S Sin(W ) + Y ◣Goto 1 ↙
Lbl 2 : “OK ”◣
在子程序Q.1 中语句If S = -1: Then Prog “JH . ZJ ”: Goto 1 : IfEnd ↙后加If S = -2: Then Prog “ZH . 2 ”: Goto 1 : IfEnd ↙(加涵通转轴时)即可。
涵通转轴直角坐标计算中桩直角坐标放样令DKP=-2时,
提示符示例说明
以上一测点中桩为中心作偏转
=〉B ? 问涵通偏角(以小数点为度)
=〉(-→+ ) δK? 问里程差(相对于涵通中桩,小里程为-、大里程为+),赋值0时转向OK
=〉(-Y + ) D? 问偏距(与直角坐标放样时意义一致)
X= 给出点位纵坐标
Y= 给出点位横坐标
OK 本转轴各点计算结束,返回直角坐标放样。
算例1
例某工程C匝道:
根据算例数据确定综合曲线属性: 令名 C.ZD 令编号0 令(矩阵存起始储单元)Z[MIN]= 100 (综合曲线段数,不含终点)N = 4
红色数据应在Q.5程序运行时按提示赋值
一给矩阵存储单元定维:(COMP状态下)140→DimZ
二编写程序PPQX(PROG状态下给定综合曲线属性)
“C. ZD →0 ”?C ↙
If C=0: Then 起始单元100→Z[98]: 段数4 →Z[99]: IfEnd ↙
Prog “PQX ”
三启动Q . 5 按下列数据建立矩阵存储表(COMP状态下按提示赋值,详见附件运行提示符)
自然段
名称 L0 L1 L2 L3 L4
DK 0 190 355.927 472.168 561.791
X 20934.495 21066.119 21142.859 21076.993 20988.267
Y 89274.172 89411.182 89552.427 89640.286 89644.485
AT 47.08177 45.09322 93.33281 160.09323 185.50027
±1 -1 1 1 1 0
L 190 165.927 116.241 89.623 0
R1 5500 5500 100 100 0
R2 5500 100 100 ×10 20 0
备注:起始矩阵存储单元Z[100]终了矩阵存储单元Z[139 ]。
(139 =100 +8 ×5-1)
四启动程序PPQX(COMP状态下指定需计算的综合曲线编号)
C. ZD →0 ?提示C匝道赋值0
回车
(自动转向PQX进入各项计算)
为了提高计算速度,现提供Q.4 (5点法加速),以该程序取代原有Q.4,其它无需改变。
取代后按指定区间反算时间大约4秒,有兴趣的朋友可以试试。
Q.4 (5点法加速)
If Z[4]= 0 : Then 1→Z[4]: IfEnd↙
Z[4]Z[G+6]→Z[9]: Z[4]Z[G+7]→Z[10]↙
( Z[9]-Z[10]) ÷(2M Z[9]Z[10])→Z[13]: S-Z→Z[14]: Z[13]Z[14]→Z[13]: 1 ÷Z[9]→Z[22]↙
0.1739274226→Z[15]: 0.3260725774→Z[16]: 0.0694318442→Z[17]: 0.3300094782→Z[18]↙
1-Z[18]→Z[19]: 1-Z[17]→Z[20]: 180 ÷л→Z[21]↙
Z[3]+ Z[17]Z[14](Z[22]+ Z[17]Z[13]) Z[21]→Z[17]↙
Z[3]+ Z[18]Z[14](Z[22]+ Z[18]Z[13]) Z[21]→Z[18]↙
Z[3]+ Z[19]Z[14](Z[22]+ Z[19]Z[13]) Z[21]→Z[19]↙
Z[3]+ Z[20]Z[14](Z[22]+ Z[20]Z[13]) Z[21]→Z[20]↙
Z[3]+ Z[14]( Z[22]+ Z[13]) Z[21]→W↙
Z[1]+ Z[14]( Z[15]cos( Z[17]) + Z[16]cos( Z[18]) + Z[16]cos( Z [19]) + Z[15]cos( Z[20]) ) +N cos( U + W ) →P↙
Z[2]+ Z[14]( Z[15]sin( Z[17]) + Z[16]sin ( Z[18]) + Z[16]sin ( Z [19]) + Z[15]sin ( Z[20]) ) + N sin (U + W) →Q↙
If O = 3 : Then Goto 2 : IfEnd↙
If O≠0 : Then Cls : “XP= ”: Locate 5 , 1 , P : “YP= ”: Locate 5 , 2 , Q : “AT= ”: W►DMS◣
IfEnd↙
Z[27]→I : If Z[I]-S = 0 And Z[I+1]= 0 And N = 0 : Then P→Z[I+1]: Q →Z[I+2]: W : Prog “H ”: T→Z[I+3]: IfEnd↙
If O≠1: Then Pol( P-Z[11], Q-Z[12]) : If J < 0 : Then J+360→J : IfEnd : Cls : “SP= ”: Locate 5 , 1 , I : “BP= ”: J ►DMS◣
Prog “Q. 6 ”: IfEnd ↙
Lbl 2
三、
1. Deg:Fix 3:20 →DimZ8
2. “BPS[1],BPS[2]”? J8
3. If J=1:Then Goto 0:Else Goto 1:IfEend8
4. Lbl 08
5. “B”?A: “SJG”B:“CLG”?C:“i1”?D8
6. “L=”:A+(B-C)×D◢
7. Goto 08
8. Lbl 18
9. B”?A: “sjg”?B:“CLG”?C:“i2”?D8
10. “L=”:A+(B-8-C) ×D+128
11. Goto 1
操作说明: 1 “BPS[1],BPS[2]”? 1为单级边坡2为两级边坡 2.B? 输入路基半宽
3.SJG? 输入设计高程
4.CLG? 输入测量高程
5i(1.2) 输入坡率
6 L得出坡脚距离中装距离
Goto 4
Lbl 3: “X=”?X:“Y=”?Y:Prog“SJ¬-PM”: X→ I: Y→J:Prog "SUB2-FS":O+W→S: “K=": S ◢
“P=": Z◢
S→ K:Prog“SJ¬-GC”:“H=”: H◢
Prog“SJ-CQW”◢
Goto4
SJ¬-PM(子程序名-平面线形数据库)
If S ≥59227.681(线元起点里程):Then 2599818.013→U(线元起点X坐标):4968 87.918→V(线元起点Y坐标):59227.681→O(线元起点里程):208028’39”→G(线元起点方位角):100 →H(线元长度):1×1045→P(线元起点曲率半径):1×1045→R(线元终点曲率半径):0 →Q(线元左右偏标志:左-1右1):IfEnd
If S ≥59327.681(线元起点里程):Then 2599730.112→U(线元起点X坐标):4968 40.237→V(线元起点Y坐标):59327.681→O(线元起点里程):208028’39”→G(线元起点方位角):90 →H(线元长度):1×1045→P(线元起点曲率半径):750→R(线元终点曲率半径):-1 →Q(线元左右偏标志:左-1右1):IfEnd
……
……
SJ-GC¬(子程序名-竖数据库)
If S<变坡终点里程And S≥变坡起点里程:Then大里程坡度→A:小里程坡度→B:变坡点里程→O:变坡点高度→G:半径→R:Prog“SUB3-GC”:IfEnd
(注:1.有多个竖曲线,依照上面的依次变更,每多一个,就增加一个。
每次只需要修改以上的数据或增加一个判断,子程序不用变动。
2.如整条线只有一个纵坡比喻为2﹪,那么程序应为If S<终点里程And S≥起点里程:Then 0.02→A:0.02→B:起点里程→O:起点高程→G:1×1045→R:Prog“SUB3-GC”:IfEnd)
SJ-CQW (子程序名-隧道数据库)
“H1=”?F:”P=”?Z
If F-H>5.845:Then √((Abs (Z))2+(F-H-0.45)2 )-7.45→W: IfEnd:
If F-H≤5.845 And F-H>-1.169: Then √((Abs (Z)-1)2+( Abs (F-H-1.5)) 2)-6→W :IfEnd:
If F-H≤-1.169: Then √((Abs (Z)) 2+(H-F+14.05) 2)-16.5→W: IfEnd:
…
…
“+CQ,-CQ=”: W
SUB1-ZS(正算子程序)¬
1÷P→ C: (P-R)÷(2HPR) → D: 180÷π→ E: 0.1739274226→A: 0.326072 5774→ 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+MW D))) → X:V+W(Asin(G+QEKW(C+KWD))+Bsin(G+QELW(C+LWD))+Bsin(G+QEFW(C+FWD))+A sin(G+QEMW(C+MWD))) → Y: G+QEW(C+WD)+90→ F: X+Zcos(F)→ X: Y+Zsin(F)→
Y
SUB2-FS(反算子程序)¬
G-90→T: Abs((Y-V)cos(T)-(X-U)sin(T)) → W: 0→ Z:Lbl 0:Prog "SUB1-ZS": T+QEW(C+WD) →L: (J-Y)cos(L)-(I-X)sin(L) → Z:If Abs(Z)<1E-6(注:此处1E-6可输入0.000001):then Goto1:Else W+Z → W:Goto 0:IfEnd
Lbl 1: 0→ Z:Prog "SUB1-ZS": (J-Y)÷sin(F)→ Z
SUB3-GC(高程子程序)
O-S→L:A-B→W:Abs(R*W÷2) →T:O-T→M:O+T→P
If S≤M:ThenG-L*B→H:Goto5:Else If S≤O:Then Goto3:Else If S≤P:Then Goto4: IfEnd: IfEnd: IfEnd
Lbi3
If W>O:Then G+(M-S)2÷2÷R-L*B→H:Goto5: Else If W<O: Then G-(M-S)2÷2÷R -L*B→H:Goto5: IfEnd: IfEnd
Lbi4
If W>O:Then G+( S-P)2÷2÷R-L*A→H:Goto5: Else If W<O: Then G-( S-P)2÷2÷R-L*A→H:Goto5: IfEnd: IfEnd
Lbi5
H→H: Return
说明:(正算1秒,反算和超欠挖5秒完成)
所有程序名。
不同线路,只需改动SJ-PM,SJ-GC,SJ-CQW三个子程序里的内容,其它不变。
1为正算,2为反算,3为超欠挖.
K= 正算时,输入所求点里程。
反算时得出里程结果
X=,Y= 正算时得出结果。
反算时输入实测坐标
P= 正算时输入偏距。
反算时得出偏距
H= 正算时得出高程。
反算时得出高程
H1
= 超欠挖时输入实测高程。