宝贝你好 第二季:Casio5800交点法与线元法(积木法)匝道坐标正反算放样程序

来源:百度文库 编辑:中财网 时间:2024/04/29 17:30:33
(XUFENG 2011.2.14)
本人一直以来想找一个交点法与线元法相结合的坐标正反算程序,在网上找了很久很久,没能找到一个较为满意的,有幸在测量空间看到大歪哥的《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]:IfEnd
LbI 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坐标、线元转向。
4、XC ?    YC? 输入置镜点即测站的X,Y坐标
5、1.ZS 2.FS选1正算 选2反算
程序线元判断原则:
(1) 以道路中线的前进方向(即里程增大的方向)区分左右;
(2) 当所求点位于中线时,Z=0;当位于中线左侧时,Z取负值;当位于中线右侧时,Z取正值。
(3) 当线元为直线时,其起点、终点的曲率半径为无穷大,以10的45次代替输入×10x45。
(4) 当线元为圆曲线时,无论其起点、终点与什么线元相接,其曲率半径均等于圆弧的半径。
(5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45次代替输入×10x45;与圆曲线相接时,曲率半径等于圆曲线的半径。终点与直线相接时,曲率半径为无穷大,以10的45次代替输入×10x45;与圆曲线相接时,曲率半径等于圆曲线的半径。
(6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。终点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
6、循环计算部份:
输入与显示简单说明
JD ZS KX+XXX? 或 ZHADAO ZS KX+XXX?输入所求的桩号(交点法或线元法 )
Z ?              输入所求点距中线的边距(在中线输零,左负右正)
RJ?              输入边桩时左右边桩连线与线路前进方向中桩切线的右交角(当输入数字0时进入下一个桩号计算输入)
X =、Y =            计算得出的所求点的左、中、右 的X Y坐标
QF(Z)= ×××            计算得出所求点的中桩切线方位角  
F= ×××    计算得出置镜点到测点的方位角
S= ×××   计算得出置镜点到测点的水平距离    
JD FS KN+?  交点法反算时需输入反算点所在(前直线,前缓和段、圆曲线、后缓和段、后直线)线元中的任一点桩号(定位线元用)
X=×××    反算输入所求点的X坐标
Y=×××     反算输入所求点的Y坐标
K=×××      计算得出求点所对应的里程
Z=×××       计算得出求点到所对应的里程的垂直距离 (负就是左边,正就是右边)