本人一直以来想找一个交点法与线元法相结合的坐标正反算程序,在网上找了很久很久,没能找到一个较为满意的,有幸在测量空间看到大歪哥的《Casio5800交点法程序》与《线元法(积木法)匝道坐标正反算放样程序》,根据歪哥意见“需要的自行修改结合XY框架自己修改为数据库反算程序等”,本人不才,采用最笨的办法将两个程序综合了一下,使之能既能进行交点法正反算,又能进行线元法正反算。
在此特别感谢大歪哥!将程序发上来,愿与大家一同交流学习欢迎大家吐口水,只要能进步就行!程序由一个主程序ZBZFS和8个子程序(JS、XY-A、XY-B、JDYS、1、2、3、4)构成,运行时只需运行主程序即可!本程序适用于单交点对称型、不对称型、无缓和曲线单圆曲线型一个交点范围内(含交点前后有直线段时)的曲线要素核对和坐标正反算,手工输入要素,对设计图纸的“直线、曲线转角表”中交点数据进行复核验证,并能对单一线元进行坐标正反算。
1主程序名:ZBZFS(功能:进入计算主程序)65→Dimz↙Deg:Fix 3↙"1.JD ZFS 2. ZHADAO ZFS"? I: I→Z[61]: "1.ZHONG SHU JS 2. JS"? I↙If I=1: Then Goto1: Else Goto2:IfEnd↙LbI 1 :If Z[61]=1: Then Prog"JDYS":Else Cls:"K0"?A:"KN"?L :"X0"?U :"Y0"?V :"F0"?W :"R0"?P :"RN"?Q:"ZX:-1,+1,0"?G:IfEnd↙LbI 2 :Prog"JS"2子程序名:JS(功能:选择正算或反算模式)Cls:"XC"?H:"YC"?Z↙Cls:"1.ZS 2.FS"? I: I=2=>Goto 3↙LbI 1 : Cls: If Z[61]=1: Then"JD ZS KX+XXX"?K :Prog"4": Else "ZHADAO ZS KX+XXX"?K :IfEnd↙LbI 2: Cls:90→B: Cls:"RJ Or 0 To K"?B:B=0 =>Goto 1:"Z"?T↙Prog "XY-A"↙X+Tcos(M+B)→X↙Y+Tsin(M+B)→Y↙360Frac((M+360)÷360→M↙Pol(X-H,Y-Z : 360Frac((J+360)÷360→J↙2→O: Prog "XY-B":Goto 2↙LbI 3 : Cls: If Z[61]=1: Then"JD FS KN+"?K:"X"?C:"Y"?D:Prog"4":Else Cls: "ZHADAO FS":"X"?C:"Y"?D:IfEnd↙LbI 4 :Prog "XY-A"↙(D-Y)sin(M)+(C-X)cos(M)→H↙If Abs(H)>X10-3 :Then K+H→K:Goto 4:IfEnd↙(D-Y)÷cos(M)→T↙3→O: Prog "XY-B":Goto 3↙3子程序名:XY-A(功能:坐标计算程序)5→N: G(Q-1-P-1)÷Abs(L-A)→F: Abs(K-A)÷N→R: 90R÷π→S:W+(FNR+2GP-1)NS→M:1→E↙U+R÷6×(Cos (W)+Cos (M) +4∑(Cos (W+((E+0.5)FR+2GP-1)×(E+0.5)S),E,0,(N-1))+2∑(Cos (W+((EFR+2GP-1)ES,E,1,(N-1)))→X ↙V+R÷6×(sin (W)+sin (M) +4∑(sin (W+((E+0.5)FR+2GP-1)×(E+0.5)S),E,0,(N-1))+2∑(sin (W+((EFR+2GP-1)ES,E,1,(N-1)))→Y↙4子程序名:XY-B(功能:显示正算或反算结果)If O=2:Then↙Cls :"K×××=":"Z=":"X=":"Y=": Locate 6,1, K : Locate 4, 2, T : Locate 4,3, X : Locate 4,4, Y◢If T=0 :Then Cls :"QF(Z)=": Locate 8,1, M:M▼DMS◢IfEnd↙Cls :"K×××=":"S=": Locate 6,1, K : Locate 4, 2, I :"F=":J:J▼DMS◢IfEnd↙If O=3:Then "X=":"Y=":"K×××=":"Z=": Locate 4,1,C: Locate 4, 2, D : Locate 6,3,K :Locate 4,4,T◢IfEnd:Cls↙5子程序名:4(功能:将交点参数转为线元计算参数)LbI 1: IF Z[48]<0 :Then -1→Z[62] : Else:1→Z[62]:IfEndLbI 2: If K≥Z[57]:Then Z[57]→A:Z[1]→L:Z[23]→U:Z[24]→V : Z[31]→W : 10^45→P:10^45→Q : 0→G:IfEnd↙LbI 3:If K≥Z[1]:Then Z[1]→A : Z[2]→L : Z[19]→U : Z[20]→V:Z[29]→W : 10^45→P:Z[46]→Q : Z[62]→G: IfEnd↙LbI 4:If K≥Z[2]:Then Z[2]→A : Z[4]→L:Z[25]→U : Z[26]→V:Z[32]→W : Z[46]→P : Z[46]→Q : Z[62]→G: IfEnd↙LbI 5:f K≥Z[4]:Then Z[4]→A : Z[5]→L : Z[27]→U:Z[28]→V : Z[33]→W :Z[46]→P : 10^45→Q : Z[62]→G: IfEnd↙LbI 6:If K≥Z[5]:Then Z[5]→A : Z[5]+1000→L:Z[21]→U : Z[22]→V : Z[30]→W:10^45→P :10^45→Q : 0→G : IfEnd↙6子程序名:JDYS(功能:输入交点要素、显示交点要素及主点坐标)Cls : "BP"?H:H→Z[57]:"K(JD)"?K:K→Z[41] :"X(JD)"?X :X→Z[42]:"Y (JD)"?Y:Y →Z[43]:"LS1"?B:B→Z[44] :"LS2"?C:C →Z[45]: ?R:R →Z[46]:"(ZH)FWJ°"?M:M→Z[47] : "α(Z-,Y+)°"?O:O→Z[48] : Z[47]+Z[48]→Z[49]: Prog "1":Prog "2"↙Cls :"T1=":"T2=":"L=":"LY=": Locate 4,1, Z[50] : Locate 4,2, Z[51]: Locate 4,3, Z[52] : Locate 4,4, Z[53]◢Cls :"E=": Locate 7,1, Z[54]Cls :"K(QD)=": "X=": "Y=": "FWJ="Locate 7,1,Z[57] :Locate 7,2, Z[23] :Locate 7,3, Z[24] :Locate 7,4, Z[31] ◢Cls :"K(ZH)=": "X=": "Y=": "FWJ=":Locate 7,1,Z[1] : Locate 7,2, Z[19] :Locate 7,3, Z[20] :Locate 7,4, Z[29]◢Cls : "K(HY)=": "X=": "Y=": "FWJ=": Locate 7,1,Z[2] : Locate 7,2, Z[25] :Locate 7,3, Z[26] :Locate 7,4, Z[32]◢Cls :"K(QZ)=": Locate 7,1,Z[3]◢Cls :"K(YH)=": "X=": "Y=": "FWJ=": Locate 7,1,Z[4] : Locate 7,2, Z[27] :Locate 7,3, Z[28] :Locate 7,4, Z[33]◢Cls :"K(HZ)=": "X=": "Y=": "FWJ=": Locate 7,1,Z[5] : Locate 7,2, Z[21] :Locate 7,3, Z[22] :Locate 7,4, Z[30]◢7子程序名:1(功能:计算交点要素)If Z[48]<0 :Then -1→Z[55] : Else 1→Z[55] : IfEnd : Z[55]* Z[48]→Z[56] ↙Z[44] 2 ÷24÷Z[46]- Z[44]^(4)÷2688÷Z[46] ^(3) →Z[6] ↙Z[45] 2 ÷24÷Z[46]- Z[45]^(4)÷2688÷Z[46] ^(3) →Z[7] ↙Z[44]÷2-Z[44]^(3)÷240÷Z[46]2 →Z[8] ↙Z[45]÷2-Z[45]^(3)÷240÷Z[46]2 →Z[9] ↙Z[8]+(( Z[46]+Z[7]-( Z[46]+Z[6])cos(Z[56]))÷sin(Z[56]))→Z[50]↙Z[9]+(( Z[46]+Z[6]-( Z[46]+Z[7])cos(Z[56]))÷sin(Z[56]))→Z[51]↙Z[46]* Z[56]π÷180+( Z[44]+ Z[45]) ÷2→Z[52]↙Z[46]* Z[56]π÷180-( Z[44]+ Z[45]) ÷2→Z[53]↙(Z[46]+(Z[6]+Z[7])÷2)÷cos(Z[56]÷2)- Z[46]→Z[54]↙Z[41]-Z[50]→Z[1] ↙↙Z[1]+Z[44]→Z[2] ↙↙Z[2]+Z[53]÷2→Z[3]↙Z[1]+Z[52]-Z[45]→Z[4]↙Z[4]+Z[45]→Z[5]↙8子程序名:2(功能:计算主点坐标及切线方位角)Z[42]-Z[50]cos(Z[47])→Z[19]: (直缓坐标)Z[43]-Z[50]sin(Z[47])→Z[20]↙Z[47]→Z : 360Frac((Z+360)÷360→Z[29] (方位角)Z[42]+Z[51]cos(Z[49])→Z[21]: (缓直坐标)Z[43]+Z[51]sin(Z[49])→Z[22]↙Z[49]→Z: 360Frac((Z+360)÷360→Z[30] (方位角)Z[1]-Z[57]→L↙(H→Z[57]为前直线起点桩号)Z[42]-( Z[50]+L)cos(Z[47])→Z[23]↙(前直线起点坐标)Z[43]-( Z[50]+L)sin(Z[47])→Z[24]↙Z[47]→Z : 360Frac((Z+360)÷360→Z[31]↙(方位角)Z[44]→Z[12]:Z[44]→Z[13]:Prog"3"↙Z[4]-Z[1]→L:90(2L-Z[44])÷Z[46]÷π→Z[11]↙Z[46]sin(Z[11])+Z[8]→Z[14]:Z[46](1-cos(Z[11]))+Z[6]→Z[15]↙Z[19]+Z[14]cos(Z[47])-Z[55]Z[15]sin(Z[47])]→Z[27]↙(圆缓点坐标)Z[20]+Z[14]sin(Z[47])+Z[55]Z[15]cos(Z[47])]→Z[28]↙Z[47]+Z[55]Z[11]→Z: 360Frac((Z+360)÷360→Z[33]↙(方位角)Z[2]-Z[1]→L:90(2L-Z[44])÷Z[46]÷π→Z[58]↙Z[46]sin(Z[58])+Z[8]→Z[14]:Z[46](1-cos(Z[58]))+Z[6]→Z[15]↙Z[19]+Z[14]cos(Z[47])-Z[55]Z[15]sin(Z[47])]→Z[25]↙(缓圆点坐标)Z[20]+Z[14]sin(Z[47])+Z[55]Z[15]cos(Z[47])]→Z[26]↙Z[47]+Z[55]Z[58]→Z: 360Frac((Z+360)÷360→Z[32]↙(方位角)9子程序名:3(主点坐标计算辅助程序)If Z[12]=0 :Then 0→Z[14]: 0→Z[15]:Else↙Z[12]- Z[12]^(5)÷40÷(Z[46]*Z[13])2+ Z[12]^(9)÷3456÷(Z[46]*Z[13])^(4) →Z[14]↙Z[12]^(3)÷6÷(Z[46]*Z[13])-Z[12]^(7)÷336÷(Z[46]*Z[13])^(3)+ Z[12]^(11) ÷42240÷(Z[46]*Z[13])^(5)→Z[15] ↙IfEnd↙程序说明:1、进入程序:1.JD ZFS 2. ZHADAO ZFS? 选1为交点法正反算(以后操作均为交点法计算),选2为线元法正反算(以后操作均为线元法计算)2、ZHONG SHU JS 2. JS?选1重输参数,选2直接进入交点法或线元法正反算(参数为已输过的参数)3、参数输入:一、交点法已知数据输入:BP?上一交点ZH桩号K(JD)?交点桩号X(JD)?交点X坐标Y(JD)?交点Y坐标LS1 ?第一缓和曲线长度LS2 ?第二缓和曲线长度R ? 圆曲线半径(ZH)FWJ°?交点前(即前交点至本交点也即ZH点)的正切线方位角α(Z-,Y+)?本交点处线路转角(左转为负,右转为正,度分秒输入)交点法计算要素显示:T1=第一切线长T2=第二切线长L=曲线总长LY=圆曲线长E=曲线外距K(ZH)=直缓点桩号K(HY)=缓圆点桩号K(QZ)=曲中点桩号K(YH)=圆缓点桩号K(HZ)=缓直点桩号二、线元法已知数据输入:K0?KN? R0? RN?F0?X0? Y0?ZX? 分别为线元起点桩号、终点桩号、起点半径、终点半径、起点切线方位角、起点X坐标、起点Y坐标、线元转向。