精度在1MM之内,希望大家有用。
竖曲线 QXJSCX”↙ Lb1 1↙ CLs:Fix 3↙ “K=”?k◢ (计算点里程输入) If k<67549.755 AND K≥66894.3:Then -0.00052→A : 0→B : 67394.3→S : 67.37→G : 600000→R :Goto 2 : IfEnd↙ If k<68708.391 AND K≥67549.755:Then -0.0048→A : -0.00052→B : 68494.3→S :66.8→G : 100000→R :Goto 2 : IfEnd↙ If k<本段竖曲线终点里程 AND K≥前一竖曲线终点里程 :Then -0.0048→前坡(大里程向)A : -0.00052→后坡(小里程向)B : 68494.3→竖曲线交点里程S :66.8→交点高程G : 100000→曲率半径R : Goto 2 : IfEnd↙ ……… 依次类推,计算原始数据完成输入,坡度换算成小数。 Lb1 2↙ S-K→L : A-B→W : Abs(R*W/2)→T : S-T→C : S T→D ↙ If K≤C : Then G-L*B →H : Goto 5 : Else If K≤S : Then Goto3 : Else If K≤D : Then Goto4 : IfEnd : IfEnd : IfEnd↙ Lb1 3↙ If W>0 : Then G (C-K)^ 2/2/R-L*B→H :Goto 5 : Else If W<0 : Then G-(C-K)^2/2/R-L*B→H : Goto 5 : IfEnd : IfEnd↙ Lb1 4↙ If W>0 : Then G (K-D) ^2/2/R-L*A→H :Goto 5 : Else If W<0 : Then G-(K-D)^2/2/R-L*A→H : Goto 5 : IfEnd : IfEnd↙ Lb1 5↙ “H=”:H◢ Goto 1↙ 线路坐标正反算 本程序由4800程序改编而成,网上有5800积分通用公式,但由坐标反算里程及边距时很慢,本程序大大提高了反算速度。1. 主程序(TYQXJS) Lbl 4:"1.SZ => XY":"2.XY=> SZ":?N:?S:Prog“SUB0”↙ 1÷P→C: (P-R)÷(2HPR) →D:180÷∏→E:N=1 => Goto1: Goto2:↙ Lbl 1:? Z: Abs(S-O) →W:Prog"SUB1": "XS=":X◢ "YS=":Y◢F-90→F: “FS=”:F▲DMS◢:Goto4↙ Lbl 2:?X:?Y:X→I:Y→J:Prog“SUB2”:O W→S:“S=”:S◢“Z=”:Z◢Goto4↙ 2. 正算子程序(SUB1) 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 Zcos(F)→X:Y Zsin(F)→Y 2. 反算子程序(SUB2) G-90→T: Abs((Y-V)cosT-(X-U)sinT) →W:0→Z:Lbl 0:Prog"SUB1": T QEW(C WD) →L: (J-Y)cos(L)-(I-X)sin(L)→Z:Abs(Z)<1E-6=>Goto1:W=W Z:Goto 0Δ←┘ Lbl 1:Z=0:Prog"SUB1": (J-Y)÷sin(F)→Z SUB0 数据库子程序 Goto1↙同时保存多个曲线时的指针 Lbl 1:IF S<***(线元终点里程):Then***→G(线元起点方位角):***→O(线元起点里程):***→U(线元起点X):***→V(线元起点Y):***→P(线元起点曲率半径):***→R(线元终点曲率半径): ***→H(线元起点至终点长度):0或1、-1→Q:Return:IfEnd↙ Lbl 1:IF S<***(线元终点里程):Then***→G(线元起点方位角):***→O(线元起点里程):***→U(线元起点X):***→V(线元起点Y):***→P(线元起点曲率半径):***→R(线元终点曲率半径): ***→H(线元起点至终点长度):0或1、-1→Q:Return:IfEnd ……………………….. 为了便于解读,每增加一个线元增加一行语句,每增加一条曲线增加一个Lbl,每增加一个工程增加一个文件。 三、使用说明 1、规定 (1) 以道路中线的前进方向(即里程增大的方向)区分左右;当线元往左偏时, Q=-1;当线元往右偏时,Q=1;当线元为直线时,Q=0。 (2) 当所求点位于中线时,Z=0;当位于中线左铡时,Z取负值;当位于中线中线右 侧时,Z取正值。 (3) 当线元为直线时,其起点、止点的曲率半径为无穷大,以10的45次代替。 (4) 当线元为圆曲线时,无论其起点、止点与什么线元相接,其曲率半径均等于圆 弧的半径。 (5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45 次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半 径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。 (6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的 值;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径等 于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。 2、输入与显示说明 输入部分: 1. SZ => XY 2. XY = > SZ N ? 选择计算方式,输入1表示进行由里程、边距计算坐标;输入2表示由坐标反算里程和边距。 S ?正算时所求点的里程,反算时为所求点的近似里程,反算时输入的近似里程不能夸线元,若夸线元的话,需进行第二次反算,并以第一次的结果做为近似里程,否则反算的里程及边距不对, Z ?正算时所求点距中线的边距(左侧取负,值右侧取正值,在中线上取零) X ?反算时所求点的X坐标 Y ?反算时所求点的Y坐标 显示部分: XS=××× 正算时,计算得出的所求点的X坐标 YS=××× 正算时,计算得出的所求点的Y坐标 FS=××× 正算时,所求点对应的中线点的切线方位角 S=××× 反算时,计算得出的所求点的里程 Z=××× 反算时,计算得出的所求点的边距 。