交点法与线元法.docx
《交点法与线元法.docx》由会员分享,可在线阅读,更多相关《交点法与线元法.docx(17页珍藏版)》请在冰豆网上搜索。
![交点法与线元法.docx](https://file1.bdocx.com/fileroot1/2023-5/20/661f1dfe-30d0-4a45-a82d-3f3f2c51d462/661f1dfe-30d0-4a45-a82d-3f3f2c51d4621.gif)
交点法与线元法
本人一直以来想找一个相结合的坐标正反算程序,在网上找了很久,没能找到一个较为满意的,有幸在测量空间看到大歪哥的《Casio5800交点法程序》与《线元法(积木法)匝道坐标正反算放样程序》,根据歪哥意见“需要的自行修改结合XY框架自己修改为数据库反算程序等”,本人不才,采用最笨的办法将两个程序综合了一下,使之能既能进行交点法正反算,又能进行线元法正反算。
在此特别感谢大歪哥!
将程序发上来,愿与大家一同交流学习欢迎大家吐口水,只要能进步就行!
程序由一个主程序ZBZFS和8个子程序(JS、XY-
A、XY-
B、JDYS、
1、2、
3、4)构成,运行时只需运行主程序即可!
本程序适用于单交点对称型、不对称型、无缓和曲线单圆曲线型一个交点范围内(含交点前后有直线段时)的曲线要素核对和坐标正反算,手工输入要素,对设计图纸的“直线、曲线转角表”中交点数据进行复核验证,并能对单一线元进行坐标正反算。
1主程序名:
ZBZFS(功能:
进入计算主程序)
65→Dimz↙
Deg:
Fix3↙
"1.JDZFS2.ZHADAOZFS"?
I:
I→Z[61]:
"1.ZHONGSHUJS2.JS"?
I↙IfI=1:
ThenGoto1:
ElseGoto2:
IfEnd↙
LbI1:
IfZ[61]=1:
ThenProg"JDYS":
ElseCls:
"K0"?
A:
"KN"?
L:
"X0"?
U:
"Y0"?
V:
"F0"?
W:
"R0"?
P:
"RN"?
Q:
"ZX:
-1,+1,0"?
G:
IfEnd↙
LbI2:
Prog"JS"
2子程序名:
JS(功能:
选择正算或反算模式)
Cls:
"XC"?
H:
"YC"?
Z↙
Cls:
"1.ZS2.FS"?
I:
I=2=>Goto3↙
LbI1:
Cls:
IfZ[61]=1:
Then"JDZSKX+XXX"?
K:
Prog"4":
Else"ZHADAOZSKX+XXX"?
K:
IfEnd↙
LbI2:
Cls:
90→B:
Cls:
"RJOr0ToK"?
B:
B=0=>Goto1:
"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":
Goto2↙
LbI3:
Cls:
IfZ[61]=1:
Then"JDFSKN+"?
K:
"X"?
C:
"Y"?
D:
Prog"4":
ElseCls:
"ZHADAOFS":
"X"?
C:
"Y"?
D:
IfEnd↙
LbI4:
Prog"XY-A"↙
(D-Y)sin(M)+(C-X)cos(M)→H↙
IfAbs(H)>X10-3:
ThenK+H→K:
Goto4:
IfEnd↙
(D-Y)÷cos(M)→T↙
3→O:
Prog"XY-B":
Goto3↙
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(功能:
显示正算或反算结果)
IfO=2:
Then↙
Cls:
"K×××=":
"Z=":
"X=":
"Y=":
Locate6,1,K:
Locate4,2,T:
Locate4,3,X:
Locate4,4,Y◢
IfT=0:
ThenCls:
"QF(Z)=":
Locate8,1,M:
M▼DMS◢
IfEnd↙
Cls:
"K×××=":
"S=":
Locate6,1,K:
Locate4,2,I:
"F=":
J:
J▼DMS◢
IfEnd↙
IfO=3:
Then"X=":
"Y=":
"K×××=":
"Z=":
Locate4,1,C:
Locate4,2,D:
Locate6,3,K:
Locate4,4,T◢
IfEnd:
Cls↙
5子程序名:
4(功能:
将交点参数转为线元计算参数)
LbI1:
IFZ[48]<0:
Then-1→Z[62]:
Else:
1→Z[62]:
IfEnd
LbI2:
IfK≥Z[57]:
ThenZ[57]→A:
Z[1]→L:
Z[23]→U:
Z[24]→V:
Z[31]→W:
10^45→P:
10^45→Q:
0→G:
IfEnd↙
LbI3:
IfK≥Z[1]:
ThenZ[1]→A:
Z[2]→L:
Z[19]→U:
Z[20]→V:
Z[29]→W:
10^45→P:
Z[46]→Q:
Z[62]→G:
IfEnd↙
LbI4:
IfK≥Z[2]:
ThenZ[2]→A:
Z[4]→L:
Z[25]→U:
Z[26]→V:
Z[32]→W:
Z[46]→P:
Z[46]→Q:
Z[62]→G:
IfEnd↙
LbI5:
fK≥Z[4]:
ThenZ[4]→A:
Z[5]→L:
Z[27]→U:
Z[28]→V:
Z[33]→W:
Z[46]→P:
10^45→Q:
Z[62]→G:
IfEnd↙
LbI6:
IfK≥Z[5]:
ThenZ[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=":
Locate4,1,Z[50]:
Locate4,2,Z[51]:
Locate4,3,Z[52]:
Locate4,4,Z[53]◢
Cls:
"E=":
Locate7,1,Z[54]
Cls:
"K(QD)=":
"X=":
"Y=":
"FWJ="Locate7,1,Z[57]:
Locate7,2,Z[23]:
Locate7,3,Z[24]:
Locate7,4,Z[31]◢
Cls:
"K(ZH)=":
"X=":
"Y=":
"FWJ=":
Locate7,1,Z[1]:
Locate7,2,Z[19]:
Locate7,3,Z[20]:
Locate7,4,Z[29]◢
Cls:
"K(HY)=":
"X=":
"Y=":
"FWJ=":
Locate7,1,Z[2]:
Locate7,2,Z[25]:
Locate7,3,Z[26]:
Locate7,4,Z[32]◢
Cls:
"K(QZ)=":
Locate7,1,Z[3]◢
Cls:
"K(YH)=":
"X=":
"Y=":
"FWJ=":
Locate7,1,Z[4]:
Locate7,2,Z[27]:
Locate7,3,Z[28]:
Locate7,4,Z[33]◢
Cls:
"K(HZ)=":
"X=":
"Y=":
"FWJ=":
Locate7,1,Z[5]:
Locate7,2,Z[21]:
Locate7,3,Z[22]:
Locate7,4,Z[30]◢
7子程序名:
1(功能:
计算交点要素)
IfZ[48]<0:
Then-1→Z[55]:
Else1→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(主点坐标计算辅助程序)
IfZ[12]=0:
Then0→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.JDZFS2.ZHADAOZFS?
选1为交点法正反算(以后操作均为交点法计算),选2为线元法正反算(以后操作均为线元法计算)
2、ZHONGSHUJS2.JS?
选1重输参数,选2直接进入交点法或线元法正反算(参数为已输过的参数)
3、参数输入:
一、交点法已知数据输入:
BP?
上一交点ZH桩号
K(JD)?
交点桩号
X(JD)?
交点X坐标
Y(JD)?
交点Y坐标
LS1?
第一缓和曲线xx
LS2?
第二缓和曲线xx
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.ZS2.FS选1正算选2反算
程序线元判断原则:
(1)以道路中线的前进方向(即里程增大的方向)区分左右;
(2)当所求点位于中线时,Z=0;当位于中线左侧时,Z取负值;当位于中线右侧时,Z取正值。
(3)当线元为直线时,其起点、终点的曲率半径为无穷大,以10的45次代替输入×10x45。
(4)当线元为圆曲线时,无论其起点、终点与什么线元相接,其曲率半径均等于圆弧的半径。
(5)当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45次代替输入×10x45;与圆曲线相接时,曲率半径等于圆曲线的半径。
终点与直线相接时,曲率半径为无穷大,以10的45次代替输入×10x45;与圆曲线相接时,曲率半径等于圆曲线的半径。
(6)当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
终点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
6、循环计算部份:
输入与显示简单说明
JDZSKX+XXX?
或ZHADAOZSKX+XXX?
输入所求的桩号(交点法或线元法)Z?
输入所求点距中线的边距(在中线输零,左负右正)
RJ?
输入边桩时左右边桩连线与线路前进方向中桩切线的右交角(当输入数字0时进入下一个桩号计算输入)
X=、Y=计算得出的所求点的左、中、右的XY坐标
QF(Z)=×××计算得出所求点的中桩切线方位角
F=×××计算得出置镜点到测点的方位角
S=×××计算得出置镜点到测点的水平距离
JDFSKN+?
交点法反算时需输入反算点所在(前直线,前缓和段、圆曲线、后缓和段、后直线)线元中的任一点桩号(定位线元用)
X=×××反算输入所求点的X坐标
Y=×××反算输入所求点的Y坐标
K=×××计算得出求点所对应的里程
Z=×××计算得出求点到所对应的里程的垂直距离(负就是左边,正就是右边)