おこちゃんの測量プログラム

測量に役立つかもしれないBASICプログラムを公開

8.都既定の巾杭計算 (F-BASIC)

lprint type"dc"
*TOHABAGUI'-----都規定巾杭計算
defdbl D-H,L,P-Y:defstr N,K:defint a,I,J,c
PI=3.141592653589793#
RA=206264.806471#:RAA=180#/PI:RRA=PI/180#
dim NN$(50),N2$(50),XR(50),YR(50),XL(50),YL(50),SS(20),S(20)
def fnRAA(D)=(fix(D)+fix*1/36)/RAA:'-----度分秒からラジアンへ------
def fnDEG(T)=fix(T)+fix(((T)-fix(T))*100#)/60#+*2/0.36#:'-----度分秒から度へ------
def fnDMS(T)=fix(T)+fix*3*60#)/100#+*4*60#-fix*5*60#))*0.006#:'-----度から度分秒へ------
AN1$="          ------------------------------"
'-----------------
*SENTAKU1
cls:locate 20,3:print"計算の項目を選択して下さい。"
locate 25,6:print"道路の巾杭・・・・・・・・・・・・・1"
locate 25,8:print"水路の巾杭・・・・・・・・・・・・・2"
locate 25,10:print"作業終了・・・・・・・・・・・・・・3"
locate 30,20:input"番号を選択して下さい。  ";JO
if JO<1 or JO>3 then *SENTAKU1
on JO goto *DOURO,*KASEN,*ENDD1
'
goto *SENTAKU1
'
*DOURO:'-----道路の巾杭-----
'-----作業メニュ------
gosub *MENU1
on JJA goto *DATRIN1,*SYUSEI1,*KEISAN1,*INSATU1,*ENDD1
'
*DATRIN1:gosub *7600:'-------デ-タ 入力-------
'
goto *DOURO
'
*SYUSEI1:'--------デ-タ-の修正-----------
cls:locate 20,3:print "--------デ-タ-の修正-----------"
locate 20,6:print "BC の点名・・・・・・・・・1"
locate 20,8:print "座標  X=・・・・・・・・・2"
locate 20,10:print "座標  Y=・・・・・・・・・3"
locate 20,12:print "BCの方向角 T0=・・・・・4"
locate 20,14:print "半径  R=・・・・・・・・・5"
locate 20,16:print "交角  IA=・・・・・・・・・6"
locate 20,18:print "幅員  B=・・・・・・・・・7"
locate 20,20:print "作業終了・・・・・・・・・・・8"
'
*41:locate 35,22:input "番号を指定して下さい。";AA
if AA<1 or AA>8 then *41
on AA goto *46,*48,*50,*52,*54,*56,*58,*DOURO
'
*46:cls:locate 20,10:input "BC の点名= ";KK$:goto  *SYUSEI1
'
*48:cls:locate 20,10:input "座標  X=  ";XB:goto *SYUSEI1
'
*50:cls:locate 20,10:input "座標  Y=  ";YB:goto *SYUSEI1
'
*52:cls:locate 20,10:input "BCの方向角 T0=  ";T0:goto *SYUSEI1
'
*54:cls:locate 20,10:input "半径  R=  ";R0:goto *SYUSEI1
'
*56:cls:locate 20,10:input "交角  IA=  ";TIA:goto *SYUSEI1
'
*58:cls:locate 20,10:input "幅員  B=  ";BB:goto *SYUSEI1
'
*KEISAN1:'------計 算 中---------
cls:locate 30,12:print "計 算 中"
'
TN=T0:GOSUB *7010:TB=TN:TN=TIA:gosub *7010:TBIA=TN
RR3=R0*sgn(R0):BB1=BB/2#:SS8=RR3-BB1:SS7=RR3+BB1
CC=int(TBIA/(6#/RAA)+0.99):TT1=TBIA/CC:RR1=SS7*TT1
if RR1<5# then CC=1:if RR1>20# then CC=CC+1:if TT1>6#/RAA then CC=CC+1
TT1=TBIA/CC:TT2=TT1/2#:LCL=TBIA*RR3:LCLL=TT1*SS7
ES=SS7*tan(TT2):EX=SS7*(1#/cos(TT1)-1#)
LS=2#*SS8*sin(TT2):LX=SS8*(1#/cos(TT1)-1#)
WB0=SS7*(1#/cos(TT2))-SS8*cos(TT2)
LL=SS7*(1#/cos(TT2)-1#):LR=SS8*(1#-cos(TT2))
'
T9=TB+PI/2#*sgn(R0):TT9=T9:T77=T9+PI:TB99=T9+PI+TBIA*sgn(R0)
XM=XB+cos(T9)*RR3:YM=YB+sin(T9)*RR3:NM$="M0"
XBCL=XB+cos(T77)*BB1:YBCL=YB+sin(T77)*BB1:XBCR=XB+cos(T9)*BB1:YBCR=YB+sin(T9)*BB1
XEC=XM+cos(TB99)*R0*sgn(R0):YEC=YM+sin(TB99)*R0*sgn(R0)
XECL=XEC+cos(TB99)*BB1:YECL=YEC+sin(TB99)*BB1:XECR=XM+cos(TB99)*SS8:YECR=YM+sin(TB99)*SS8
'
for AA=1 to CC step 1
T8=TT9+PI+TT1*sgn(R0)
if R0<0 then *84
XR(AA)=XM+cos(T8)*SS8:YR(AA)=YM+sin(T8)*SS8:N$=str$(AA):NN$(AA)="R"+N$
XL=XM+cos(T8)*SS7:YL=YM+sin(T8)*SS7:T7=T8-PI/2#
XL(AA)=XL+cos(T7)*ES:YL(AA)=YL+sin(T7)*ES:N2$(AA)="L"+N$
goto *88
'
*84
XL(AA)=XM+cos(T8)*SS8:YL(AA)=YM+sin(T8)*SS8:N$=str$(AA):N2$(AA)="L"+N$
XR=XM+cos(T8)*SS7:YR=YM+sin(T8)*SS7:T7=T8+PI/2#
XR(AA)=XR+cos(T7)*ES:YR(AA)=YR+sin(T7)*ES:NN$(AA)="R"+N$
*88:TT9=T8+PI
next AA
'
TN=TT1:gosub *7200:TTT1=TN:N$=str$(CC):TB9=T9+(TBIA+PI)*sgn(R0)
'
goto *DOURO
'
'------------計算書作成------------
*INSATU1:cls
locate 30,12:print "印 刷 中"
lprint:lprint:lprint:lprint:lprint:lprint:lprint:lprint "                      曲 線 部 巾 杭 計 算 書(道路)":lprint:lprint
lprint using "           &      &  XBC=#######.#####            YBC=#######.#####";KK$,XB,YB:lprint
lprint using "           方向角     T0=#######.######   半 径    R=#######.#####";T0,R0:lprint
lprint using "           交 角    IA=#######.######   幅 員    B=#######.#####";TIA,BB:lprint
lprint AN1$:lprint
lprint using "           区間数      P=###";CC:lprint
lprint using "           全曲線    CL0=#######.#####    外曲線   CL=#######.#####";LCL,LCLL:lprint
lprint using "           外区間     ES=#######.#####          EX=#######.#####";ES,EX:lprint
lprint using "           内区間     LS=#######.#####          LX=#######.#####";LS,LX:lprint
lprint using "           外SL    LL=#######.#####    内 M   LR=#######.#####";LL,LR:lprint
lprint using "           全幅員    B0=#######.#####    交角2  IA2=#######.######";WB0,TTT1:lprint
lprint AN1$:lprint
lprint using "               円の中心 &    &X=#######.#####       Y=#######.#####";NM$,XM,YM:lprint
lprint using "                          BCR X=#######.#####   BCR Y=#######.#####";XBCR,YBCR
lprint using "                          BCL X=#######.#####   BCL Y=#######.#####";XBCL,YBCL:lprint
for AA=1 to CC step 1
lprint using "               巾 杭   &    &X=#######.#####       Y=#######.#####";N2$(AA),XL(AA),YL(AA)
lprint using "                        &    &X=#######.#####       Y=#######.#####";NN$(AA),XR(AA),YR(AA):lprint
next AA
lprint using "                           EC X=#######.#####    EC Y=#######.#####";XEC,YEC
lprint using "                          ECL X=#######.#####   ECL Y=#######.#####";XECL,YECL
lprint using "                          ECR X=#######.#####   ECR Y=#######.#####";XECR,YECR:lprint
lprint chr$(12);
'
goto *DOURO
'
end
'
*KASEN:'-----------河川の巾杭計算------------
locate 20,5:print "***作業メニュ- ***"
gosub *MENU1
on JJA goto *DATRIN2,*SYUSEI2,*KEISAN2,*INSATU2,*ENDD1
'
*DATRIN2:gosub *7600:'-------デ-タ 入力-------
locate 20,19:input "  側 道  W= ";WW
'
goto *KASEN
'
*SYUSEI2:'--------デ-タ-の修正-----------
cls:locate 20,1:print "--------デ-タ-の修正-----------"
locate 20,4:print "BC の点名・・・・・・・・・1"
locate 20,6:print "座標  X=・・・・・・・・・2"
locate 20,8:print "座標  Y=・・・・・・・・・3"
locate 20,10:print "BCの方向角 T0=・・・・・4"
locate 20,12:print "半径  R=・・・・・・・・・5"
locate 20,14:print "交角  IA=・・・・・・・・・6"
locate 20,16:print "幅員  B=・・・・・・・・・7"
locate 20,18:print "側道  W=・・・・・・・・・8"
locate 20,20:print "作業終了・・・・・・・・・・・9"
'
*143:locate 35,22:input "番号を指定して下さい。";AA
if AA<1 or AA>9 then *143
on AA goto *146,*148,*150,*152,*154,*156,*158,*160,*KASEN
'
*146:cls:locate 20,10:input "BC の点名= ";KK$:goto  *SYUSEI2
'
*148:cls:locate 20,10:input "座標  X=  ";XB:goto *SYUSEI2
'
*150:cls:locate 20,10:input "座標  Y=  ";YB:goto *SYUSEI2
'
*152:cls:locate 20,10:input "BCの方向角 T0=  ";T0:goto *SYUSEI2
'
*154:cls:locate 20,10:input "半径  R=  ";R0:goto *SYUSEI2
'
*156:cls:locate 20,10:input "交角  IA=  ";TIA:goto *SYUSEI2
'
*158:cls:locate 20,10:input "幅員  B=  ";BB:goto *SYUSEI2
'
*160:cls:locate 20,10:input "側道  W=  ";WW:goto *SYUSEI2
'
*KEISAN2:'---------計 算 中---------
cls:locate 30,12:print "計 算 中"
TN=T0:gosub *7010:T8=TN:TN=TIA:gosub *7010:TBIA=TN:R=R0:gosub *7700:TL0=TL:DCL0=DCL:SL0=SL:DM0=DM:DC0=DC
R=R0+BB/2#:gosub *7700:TL2=TL:DCL2=DCL:SL2=SL:DM2=DM:DC2=DC
R=R0-BB/2#:gosub *7700:TL1=TL:DCL1=DCL:SL1=SL:DM1=DM:DC1=DC
if R0>0 then *169
TL1=TL2:TL2=TL:DCL1=DCL2:DCL2=DCL:SL1=SL2:SL2=SL:DM1=DM2:DM2=DM:DC1=DC2:DC2=DC
*169:DS=BB*TBIA*RAA/1000#:DT0=(SL2+DS)/SL2*TL2:DR0=DT0*tan(PI/2#-TBIA/2#)
DN=fix(TBIA/(6#*RRA)+1#):ADN=DN/2#-fix(DN/2#)
if ADN>0 then DN=DN+1
if DCL1/DN>20# then let DN=DN+2#
TT1=TBIA/DN:TT2=TT1/2#:TMR=T8+PI/2#*sgn(R0)
XM=XB+cos(TMR)*R0*sgn(R0):YM=YB+sin(TMR)*R0*sgn(R0)
TM=TMR+PI:TM1=TM:TM2=TM+TBIA*sgn(R0)
RI=R0*sgn(R0)-BB/2#-WW:RU=R0*sgn(R0)+BB/2#+WW:LU=2#*RU*tan(TT2)
DSU=RU/cos(TT2)-RU:LI=2#*RI*sin(TT2):DSI=RI-cos(TT2)*RI
RUK1=sqr(RU*RU+(LU/2#)*(LU/2#)):RUK2=RU+DSU
RIK1=sqr*6:RIK2=RI:TM=TM+TT2*sgn(R0):S2=RU+DSU
RRI=(RI-R0+DS):DDSI=R0+RRI*COS(TT1)-SQR(RI*RI-RRI*SIN(TT1)*SIN(TT1))
'
S1=RI-DSI:S2=RU+DSU
'
if R0<0 then *203
for J=1 to DN
XR(J)=XM+cos(TM)*S1:YR(J)=YM+sin(TM)*S1
XL(J)=XM+cos(TM)*S2:YL(J)=YM+sin(TM)*S2:TM=TM+TT1*sgn(R0)
next J
'
XBCL=XM+cos(TM1)*RU:YBCL=YM+sin(TM1)*RU:XBCR=XM+cos(TM1)*RI:YBCR=YM+sin(TM1)*RI
XECL=XM+cos(TM2)*RU:YECL=YM+sin(TM2)*RU:XECR=XM+cos(TM2)*RI:YECR=YM+sin(TM2)*RI
XEC=XM+cos(TM2)*R0*sgn(R0):YEC=YM+sin(TM2)*R0*sgn(R0)
TN=TT1:gosub *7200:TTM1=TN:TN=TT2:gosub *7200:TTM2=TN
'
goto *KASEN
*203
for J=1 to DN
XL(J)=XM+cos(TM)*S2:YL(J)=YM+sin(TM)*S2
XR(J)=XM+cos(TM)*S1:YR(J)=YM+sin(TM)*S1:TM=TM+TT1*sgn(R0)
next J
'
XBCR=XM+cos(TM1)*RI:YBCR=YM+sin(TM1)*RI:XBCL=XM+cos(TM1)*RU:YBCL=YM+sin(TM1)*RU
XECR=XM+cos(TM2)*RI:YECR=YM+sin(TM2)*RI:XECL=XM+cos(TM2)*RU:YECL=YM+sin(TM2)*RU
XEC=XM+cos(TM2)*R0*sgn(R0):YEC=YM+sin(TM2)*R0*sgn(R0)
TN=TT1:gosub *7200:TTM1=TN:TN=TT2:gosub *7200:TTM2=TN
'
goto *KASEN
'
'------------計算書作成------------
*INSATU2:cls
locate 30,12:print "印 刷 中"
lprint:lprint:lprint:lprint:lprint:lprint:lprint:lprint "                      曲 線 部 巾 杭 計 算 書(河川)":lprint:lprint
lprint using "               &      &  XBC=#######.#####            YBC=#######.#####";KK$,XB,YB
lprint using "               方向角     T0=#######.######     半 径  R=#######.#####";T0,R0
lprint using "               交 角    IA=#######.######     幅 員  B=#######.#####";TIA,BB
lprint using "                                側道巾  W=#######.#####";WW
lprint AN1$:lprint
lprint "                外  側       中  心       内  側":lprint
lprint using "          CL=#####.#####      CL=#####.#####      CL=#####.#####";DCL2,DCL0,DCL1
lprint using "            TL=#####.#####      TL=#####.#####      TL=#####.#####";TL2,TL0,TL1
lprint using "              SL=#####.#####      SL=#####.#####      SL=#####.#####";SL2,SL0,SL1
lprint using "                M=#####.#####       M=#####.#####       M=#####.#####";DM2,DM0,DM1
lprint using "                C=#####.#####       C=#####.#####       C=#####.#####";DC2,DC0,DC1
lprint AN1$:lprint
lprint using "                 円の中心          XM=#######.#####";XM
lprint using "                                   YM=#######.#####";YM:lprint
lprint using "             XBCL=#######.#####     XBC=#######.#####    XBCR=#######.#####";XBCL,XB,XBCR
lprint using "             YBCL=#######.#####     YBC=#######.#####    YBCR=#######.#####";YBCL,YB,YBCR:lprint
lprint using "             XECL=#######.#####     XEC=#######.#####    XECR=#######.#####";XECL,XEC,XECR
lprint using "             YECL=#######.#####     YEC=#######.#####    YECR=#######.#####";YECL,YEC,YECR
lprint AN1$:lprint
lprint using "              IA2=#####.######    IA3=#####.######  区間数=###";TTM1,TTM2,DN
lprint using "               RU=#####.#####      LU=#####.#####      dSU=#####.#####";RU,LU,DSU
lprint using "               RI=#####.#####      LI=#####.#####      dSI=#####.#####";RI,LI,DSI
lprint using "            検測1=#####.#####     RU+=#####.#####      dS0=#####.#####";RUK1,RUK2,DS
lprint using "            検測2=#####.#####      RI=#####.#####       R'=#####.#####";RIK1,RIK2,DR0
lprint AN1$:lprint
'
if R0<0 then *242
for J=1 to DN
lprint using "               円の外側  XL###=#######.#####     YL###=#######.#####";J,XL(J),J,YL(J)
lprint using "                   内側  XR###=#######.#####     YR###=#######.#####";J,XR(J),J,YR(J):lprint
next J
'
lprint chr$(12);
'
goto *KASEN
'
*242
for J=1 to DN
lprint using "             円の内側  XR###=#######.######     YR###=#######.######";J,XL(J),J,YL(J)
lprint using "                 外側  XL###=#######.######     YL###=#######.######";J,XR(J),J,YR(J):lprint
next J
'
lprint chr$(12);
'
goto *KASEN
'
'
end
'
'
*5200:'------角度の正規化-----
if TN=>360# then TN=TN-360#
*5210:if TN<0 then TN=TN+360#
if TN=>360 then *5200
if TN<0 then *5210
return
'
'
*HOKKYOKU1
'
*MENU1
cls:locate 15,3:print"*** 作 業 メニュウ- ***"
locate 20,6:print"デ-タの入力 ・・・・・・・1"
locate 20,8:print"デ-タの修正 ・・・・・・・2 "
locate 20,10:print"計  算・・・・・・・・・・3 "
locate 20,12:print"計算書の印刷 ・・・・・・・4 "
locate 20,14:print"作業の終了 ・・・・・・・・5 "
locate 30,17:input"番号を指定    ";JJA
if JJA<1 or JJA>5 then *MENU1
return
'
'
*7010:'---------度分秒からラジアンへの変換-------
D1=abs(TN):D2=(D1-fix(D1))*100#:D3=(D2-fix(D2))*100#
TN=sgn(TN)*(fix(D1)+fix(D2)/60#+D3/3600#)/RAA
return
'
*7200:'------ラジアンから度分秒への変換-------
TN=TN*RAA
*286:if TN<0 then TN=TN+360#
if TN=>360# then TN=TN-360#
if TN=>360# or TN<0 then *286
TDD=fix(TN):TM=(TN-TDD)*60#:TMM=fix(TM):TS=(TM-TMM)*60#
TN=TDD+TMM/100#+TS/10000#
return
'
*7600:'-----------デ-タの入力-----------
cls:locate 20,2:print "-----------デ-タの入力-----------"
locate 20,5:input "BCの点名      ";KK$
locate 20,7:input "   座標  X= ";XB
locate 20,9:input "   座標  Y= ";YB
locate 20,11:input "接線方向角  T0=  ";T0
locate 20,13:input "  半 径  R= ";R0
locate 20,15:input "  交 角  IA= ";TIA
locate 20,17:input "  幅 員  B= ";BB
return
'
*7700:'--------円曲線の要素 SUB------------
cls:locate 20,10:print "-----------円曲線の要素 SUB-----------"
TR2=TBIA/2#
R=abs(R):TL=R*tan(TR2):DCL=R*TBIA:SL=R*(1#/cos(TR2)-1#)
DM=R*(1#-cos(TR2)):DC=2#*R*sin(TR2)
return
'
'
'
*ENDD1:stop
'
end
 

*1:D)-fix(D)*100#)/60#+(D*100#-fix(D*100#

*2:T*100#)-fix(T*100#

*3:T-fix(T

*4:T-fix(T

*5:T-fix(T

*6:RI-DSI)*(RI-DSI)+(LI/2#)*(LI/2#