曲线元计算Word格式文档下载.docx
- 文档编号:17646816
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:11
- 大小:23.29KB
曲线元计算Word格式文档下载.docx
《曲线元计算Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《曲线元计算Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
G+180Q(M(S-O)÷
(8P)+M^2(P-R)(S-O)^2÷
(128PR(H-O)))÷
π→ListX[M]NextListX[8]→T
360(Frac((T+360)÷
360)→T
Lbl1(中边桩坐标计算)
U+(S-O)(Cos(G)+4∑(Cos(ListX[2M+1]),M,0,3)+2∑(Cos(ListX[2M+2]),M,0,3)-Cos(ListX[8]))÷
24→X
V+(S-O)(Sin(G)+4∑(Sin(ListX[2M+1]),M,0,3)+2∑(Sin(ListX[2M+2]),M,0,3)-Sin(ListX[8]))÷
24→Y
X+ZCos(T+C)→X
Y+ZSin(T+C)→Y
Return
HHB2(四等分复化辛卜生坐标反算子程序)
Lbl0(反算数据初始化)
G-(180-C)→F
O+Abs((E-V)Cos(F)-(N-U)Sin(F))→S
0→Z(置零)
Lbl1(反算桩号偏距)
180(T-(180-C))÷
π→L
(E-Y)Cos(L)-(N-X)Sin(L))→Z
IfZ<10^(-5):
Else
S+Z→S:
Prog”DATP[XX]”:
Prog”TURN[YS]”:
IfEnd
Lbl2(计算偏距)
(N-Y)÷
Sin(T+C)→Z
DATP[XX](平面数据库子程序)
IfS≤Kei:
Then[[Ksi,XSi,YSi,TSi,RSi,Rei,Kei,Qi]]→MatA:
Return:
IfS≤Kei+1:
Then[[Ksi+1,Xsi+1,Ysi+1,Tsi+1,Rsi+1,Rei+1,Kei+1,Qi+1]]→MatAReturn:
.............
TURN[YS](将存在矩阵中的线元数据赋给正算标准变量)
MatA[1,1]→O
MatA[1,2]→U
MatA[1,3]→V
MatA[1,4]→G
MatA[1,5]→P
MatA[1,6]→R
MatA[1,7]→H
MatA[1,8]→Q
关于程序的一些说明:
1.程序的功能:
实现线路全线任意角度正反算,反算无需输入近似桩号。
2.程序计算核心是复化辛卜生近似求积分公式,相对于高斯-勒让德公式来说,是比较好理解的,即用小段抛物线拟合曲线。
但是精度在分段数相同的条件下要差些,当然程序中4等分能满足一般放样要求。
在5800P中,运行的速度也慢些。
在此主要是比较,大家可以选择适合自己计算器的数学模型来编制程序。
FX-5800P曲线元计算之高斯-勒戎德版
FX-5800P之曲线元计算(高斯-勒让德版)
F[QXY](曲线元主程序)
Lbl0(线元要素输入)
“KS=”?
0:
“XS=”?
U:
“YS=”?
V:
Cls
“TS=”?
G:
“RS=”?
P:
“Re=”?
R:
“Ke=”?
H:
“[-1,0,1]PX=”?
Q
Lbl1(坐标及切线方位角计算)
Norm1
”Kp=”?
S:
IFS=-1:
ThenCls:
Goto0:
”Zp=”?
Abs(S-O)→W
(P-R)÷
(2PR(H-O))→D
Prog"
G[ZS]"
Locate4,1,"
—RESULT--"
Locate1,2,"
Xp="
:
Locate5,2,X
Locate1,3,"
Yp="
Locate5,3,Y
Locate1,4,"
Tp="
Locate5,4,T0◄
G[ZS](高斯-勒戎德4节点近似积分计算线元坐标子程序)
Lbl0
0.1739274226→A:
0.32607257774→B
0.0694318442→K:
0.3300094782→L
Lbl1
U+W(ACos(G+180QKW(1÷
P+KWD)÷
π)+BCos(G+180QLW(1÷
P+LWD)÷
π)+BCos(G+180(1-L)QW(1÷
P+(1-L)WD)÷
π)+ACos(G+180(1-K)QW(1÷
P+(1-K)WD)÷
π))→X
V+W(ASin(G+180QKW(1÷
π)+BSin(G+180QLW(1÷
π)+BSin(G+180(1-L)QW(1÷
π)+ASin(G+180(1-K)QW(1÷
π))→Y
G+180QW(1÷
P+WD)÷
π+C→F
X+ZCos(F)→X:
Y+ZSin(F)→Y
360Frac((360+F-C)÷
参数说明:
KS=?
起点桩号XS=?
起点X坐标YS=?
起点Y坐标TS=?
起点切线方位角RS=?
起点半径Re=?
终点半径Ke=?
终点桩号[-1,0,1]PX=?
线元偏向系数,左-1,右1,直线为0Kp=?
待求点桩号Zp=?
待求点偏距,左负右正。
ANG=?
斜交右角,0-180度。
应网友“相忘于江湖”之邀,特写此程序。
在我写这个程序的时候,我就想起那个自定义为“自然曲线版”的结构复杂、功能强大、智能化程度很高的综合计算程序。
相对来说,这个程序结构简单,功能单一,恰似一把“匕首”。
核心程序数学模型采用高斯-勒让德近似积分,从数值计算的角度来说,此法收敛速度快,而且是数值稳定的,比较适合FX-5800P编程。
需要特别声明的是:
这个案例,是高等数学一个很成功的应用,当然并非本人原创,我第一次遇到这个应用是在测量空间里面,很佩服那个“第一人”!
后来我花了一段不短的时间,才勉强能够推导。
程序适用于直线、圆曲线、缓和曲线(含不完整的),我想:
那些刚开始从事线路测量工作的朋友肯定会喜欢的。
FX-5800P线路计算
F[NPT](主程序)
LblQ(选择单点或多点计算模式)4→DimZ“SELECTMODE”“F0:
ONEPOINT”“F1:
NPOINT”?
→Z[4]IfZ[4]=0:
Then
GotoB:
ElseIfZ[4]=1:
ThenGotoA:
ElseCls:
GotoQ:
LblA(批量计算直角坐标和极坐标元素入口)Norm1:
Deg:
FreqON:
ClrStat:
0→N:
ClsProg"
STATION"
IFZ[3]=-1:
Stop:
IfEndClsZ[1]→E“[KS]+Ke]i=”?
E:
E→Z[1]:
Cls“STEP=”?
→Z[2]:
Cls“Zp=”?
Z90→C:
”ANG=”?
Lbl1(循环生成桩号序列)ReP(E)→ListFreq[1]ReP(E)+(Z[2]-10(Frac(0.1ReP(E)))→ListFreq[2]For3→MTo(Int(((ImP(E)-ReP(E))÷
Z[2])+2-1)ListFreq[M-1]+Z[2]→ListFreq[M]Next
Lbl2(循环计算坐标)ImP(E)→ListFreq[M+1]For1→MTo(Int((ImP(E)-ReP(E))÷
Z[2])+2)ListFreq[M]→SProg"
DATP[MC]"
TURN[YS]"
ZS"
Fix3X→ListX[M]Y→ListY[M]Cls:
Norm1Locate2,2,”COMPUTER…”Locate13,2,Intg(((ImP(E)-ReP(E))÷
Z[2])+2-M)Fix3Next
Lbl3(提取结果并显示)Cls:
”PRESS[MODE][4]=>
AnsF[XYK]Or[EXE]=>
SETOUT”◄For1→MToInt((ImP(E)-ReP(E))÷
Z[2])+2ListX[M]→XListY[M]→YListFreq[M]→SProg"
POL"
DISP.KZ"
◄Prog"
DISP.XY"
◄NextGotoA
LblB(单点计算模式入口)Norm1:
0→N(置零)Prog"
Lbl4(单点计算模式)Cls:
SIFS=-1:
IfEndCls:
ZProg"
◄Goto4
STATION(测站输入子程序)
ClsZ[2N+3]→E"
St[X]+St[Y]i"
?
EE→Z[2N+3]Return
DATP[MC](平面数据库子程序)
IfEndIfS≤Kei+1:
Then[[Ksi+1,Xsi+1,Ysi+1,Tsi+1,Rsi+1,Rei+1,Kei+1,Qi+1]]→MatA:
IfEnd.............
MatA[1,1]→OMatA[1,2]→UMatA[1,3]→VMatA[1,4]→GMatA[1,5]→PMatA[1,6]→RMatA[1,7]→HMatA[1,8]→QReturn
ZS(线路正算预备子程序)
Abs(S-O)→W(P-R)÷
(2PR(H-O))→DProg"
Return
Lbl00.1739274226→A:
0.32607257774→B0.0694318442→K:
0.3300094782→LLbl1U+W(ACos(G+180QKW(1÷
π))→XV+W(ASin(G+180QKW(1÷
π))→YG+180QW(1÷
π+C→FX+ZCos(F)→XY+ZSin(F)→Y360Frac((360+F-C)÷
360)→TReturn
POL(极坐标计算子程序)
Pol(X-ReP(Z[2N+3]),Y-ImP(Z[2N+3])+10^(-5))J<
0=>
J+360→JReturn
DISP.KZ(桩号及偏距显示子程序)
Fix3:
Cls"
Kp="
Locate5,2,SLocate1,3,"
Zp="
Locate5,4,ZReturn
DISP.XY(极坐标要素及直角坐标显示子程序)
HR="
Locate5,1,J0"
HD="
Locate5,2,I"
Locate5,3,X"
Locate5,4,YReturn
关于程序的几点说明1.写此程序的初衷是应网友“K0+000"
之邀,提供一份基本程序供初学者参考之用。
所以程序实现的功能相对单一,仅具备线路正算及放样功能(包括单点循环计算和批量标准偏距计算)。
由于程序是从综合程序中临时分解组合而成,有些变量在综合程序中是通用的,如变量Z[2N+3]存储测站坐标,类似情况,在此看来有些。
。
语言和逻辑顺序也可能存在一些混乱。
敬请谅解!
旨在抛砖引玉。
2.程序采用线元法的思路,核心数学模型是高斯-勒让德4节点近似求积分。
本人偏爱线元法是出于程序可以很好地实现整个线路连续累积计算并自动检核,略去线元衔接处一些参数的输入。
解决问题快速而且确定。
为此我曾做过试验:
一个由64段线元复杂组合而成线路,从数据库参数输入到实现平面相关计算大致在10分钟左右,终点桩号、坐标、方位正确即证明整个线路计算无误,速度和可靠性应该是不错的。
在此为了简洁,采用的仍是传统线元数据库输入方法。
3.程序由主程序+测站子程序+平面数据库子程序+数据库转换子程序+正算预备子程序+正算子程序+极坐标计算子程序+桩号偏距显示子程序+坐标显示子程序组成,之所有这么多子程序,是因为在母体程序中,这些都是可任意调用的标准模块。
搞清楚程序之间的关系,一切均无需再说明。
如有兴趣的朋友有不清楚的地方可QQ联系。
FX-5800P高程计算
FX5800P高程计算
NFH[KZ](高程计算主程序)
Lbl1(数据初始化)
Prog”SEL[HDT]”
Prog”NH[JSYS]”
”W0=”?
X:
“[+-]t0=”?
Y
Lbl2(循环调用纵横数据计算高程)
Do
“KP=”?
IfS=-1:
IfS>
maxXOrS<
minX:
”----KPOVER!
----“
Locate3,3,”[EXE]=>
INPUT”◄
Goto2:
"
ZP="
Prog”NH[ZHYS]”
Prog”S[SQX]”
Prog”SEL[IDT]”
Prog”TIM[YS]”
Prog”S[I]”
“HC=”?
→E
Prog”H[JS]”
Prog”DISP.HITW”◄
LpWhileS≥0
SEL[HDT](竖曲线数据库选择子程序)
Lbl0(选择线路代码)
“[ZHUHAI.JICHANG]---------------”
”THEROADNO.XX”?
IfM<
1OrM>
31:
ThenGoto0:
ThenProg”NDH[KX]”:
IfM=2:
ThenProg”NDH[ZX]”:
......
IfM=31:
ThenProg”NDH[XXX]”:
NDH[XXX](竖曲线数据库子程序)
变坡点数目→N:
N+1→DimZ
{起点桩号,变坡点1桩号。
变坡点N桩号,终点桩号}→ListX
{起点高程,变坡点1高程。
变坡点N高程,终点高程}→ListY
{变坡点1竖曲线半径。
变坡点N竖曲线半径,10^30,10^30}→ListFreq
NH[JSYS](循环计算纵坡子程序)
For1→IToN+1
(ListY[I+1]-ListY[I])÷
(ListX[I+1]-ListX[I])→Z[I]
Next
NH[ZHYS](循环判断、转换竖曲线参数子程序)
For1→IToN
IfS≤ListX[I+1]+0.5ListFreq[I]Abs(Z[I+1]-Z[I]):
Then
ListX[I+1]→A
ListY[I+1]→B
ListFreq[I]→R
Z[I]→C:
Z[I+1]→D
S[SQX](竖曲线计算子程序)
D-C→W:
0.5RAbs(W)→T:
A-T→E:
A+T→F
IfS≤E:
ThenB+(S-A)C→H:
Return:
IfS≤F:
ThenB+(S-A)C+W(S-A+T)2÷
(2RAbs(W))→H:
F:
ThenB+(S-A)D→H:
SEL[IDT](横坡数据库引导子程序)
ThenProg”NDI[KX]”:
ThenProg”NDI[ZX]”:
NDI[XXX](横坡数据库子程序)
IfZ≤0:
ThenGotoL:
ElseGotoR:
LblL(设计高程线左侧横坡)
IfS≤横坡变化区间终点桩号:
Then[[起点桩号,终点桩号,起点横坡,终点横坡]]→MatF:
LblR(设计高程线右侧横坡)
TIM[YS](矩阵横坡数据传递给标准变量)
MatF[1,1]→A
MatF[1,2]→B
MatF[1,3]→C
MatF[1,4]→D
S[I](横坡计算子程序,按图纸确定)
Lbl1(线性过渡)
C+(D-C)(S-A)÷
(B-A)→I:
I÷
100→I
Lbl2(三次抛物线过渡,其中一种)
C+(D-C)(3((S-A)÷
(B-A))^2-2((S-A)÷
(B-A))^3)→I:
I÷
H[JS](高程计算子程序)
H+(Abs(Z)-X)+Y→G
DISP.HITW(高程相关显示子程序)
HS="
Locate5,1,H
Ht="
Locate5,2,G
I%="
Locate5,3,100I
TW="
Locate5,4,G-E
关于程序的几点说明:
1.本程序由1个主调程序+12个相关子程序组成,实现线路任意点高程计算。
之所以“庞大”,一方面仍然是从程序标准化和智能化方面来考虑,另一方面,我面对的大小线路总共31条,不得不考虑数据的处理方式。
如果说有什么优势的话,那么竖曲线数据处理将会给你带来预想不到的效果。
2.有兴趣的朋友可以根据自己工程的实际情况,略去一些不必要的子程序(如只有一条线路,又何必需要线路、数据库引导程序?
)自行组合、修改。
我的目的是想提供一些思路,大家一起研究,有什么好的建议,可以QQ联系我,不妥之处,敬请谅解。
Z0W-FX5800(快速计算中边桩坐标正反算、可现场输入要素,可预先建好数据库
主程序Z0W
Lbl0:
“NEW=0,Z1=1,Z2=2……”?
Z:
选则数据库
IfZ=0:
Then“X0=”?
A:
“Y0=”?
B:
“C0=”?
C:
“R0=”?
D:
“R1”?
“DKA=”?
“DKB=”?
新建数据库
1.ZS,2.FS"
?
→Q:
正反算
Q=2=>
Goto2↙
Lbl
1:
“DK=,<
0Stop”?
H<
Stop↙
Z=1=>
Prog“Z1”:
Z=2=>
Prog“Z2”↙
H-F→X:
0.5((1/E)-(1/D))÷
(G-F)→N↙
C+(X(1/D)+NX2)*180÷
π→P:
P<
P+360→P:
P>
360=>
P-360→P↙
A+∫(cos(C+(X(1/D)+NX2)*180÷
π),0,X)→U↙
B+∫(sin(C+(X(1/D)+NX2)*180÷
π),0,X)→V↙
Goto4:
Cls:
Xn="
Locate4,1,U:
Yn="
Locate4,2,V:
"
AT="
P►DMS◢
“WL=“?
W:
WR="
S↙
U+W×
cos(P-90)→K:
V+W×
sin(P-90)→T
Locate1,1,“XL=”:
Locate4,1,K:
Locate1,3,“YL=”:
Locate4,3,T◢
U+S×
cos(P+90)→K:
V+S×
sin(P+90)→T:
Locate1,1,“XR=”:
Locate4,2,K:
Locate1,3,“YR=”:
Locate4,4,T◢
Norm2:
Goto
1↙
2:
“XD=,<
0,STOP”?
R:
R<
“YD=”?
S↙
“DK=”?
H:
0→L:
Z↙
4:
Pol(R-U,S-V):
J<
0=>
J+360→J↙
While
Abs(Icos(J-P))≤0.001:
P-J>
180=>
J+360→J:
P-J<
-180=>
P+360→P:
IFP-J>
then(-I)→L:
ElseI→LIfEnd↙
3:
WhileEnd:
H+Icos(J-P)→H:
Fix3↙
“DK=”:
Locate
4,1,H:
“PY=”:
4,2,L◢
2↙
数据库子程序
Z1
IfH≤第一曲线终点桩号:
then
第一曲线起点X→A:
第一曲线起点Y→B:
第一曲线起点方位角→C:
起点半径→D:
终点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 曲线 计算