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

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

3.座標による距離方向角の計算 (F-BASIC)

'***** 座標による距離方向角の計算 *****
lprint type"dc"
'
*ZASTKEISAN
defstr N,Q:defint I,J:defdbl A-H,K-M,O,P,R-Z
EE=1/10000000000#
PI=3.141592653589793#:RAA=180#/PI:RRA=PI/180#:RA=206264.8062471#
dim N$(30),X(30),Y(30),BB(30),SS(30),BR(30),AT(30),AR(30),TT(30)
def fnRRA(T)=(T*10000#-40#*(fix(T*100#)+60#*fix(T)))/RA:'---度分秒からラジアン
def fnRAA(T)=(fix(T)+fix*1*100#)/60#+(T*100#-fix(T*100#))/36#)/RAA:'---度分秒からラジアン
def fnDMS(T)=fix(T)+fix*2*60#)/100#+*3*60#-fix*4*60#))*0.006#:'-----度から度分秒へ-----
def fnDEG(T)=fix(T)+fix(((T)-fix(T))*100#)/60#+*5/36#:'-----度分秒から度へ------
'
*SENTAKU1
I=0:cls:locate 20,5:print"***** 座標による距離方向角の計算 *****"
locate 20,8:print "放射ST ----------1"
locate 20,10:print "開放ST ----------2"
locate 20,12:print "放射と開放の混合計算 ----3"
locate 20,14:print "作 業 終 了 -------4"
locate 20,17:input "     番号指定        ";J
if J<1 or J>4 then *SENTAKU1
on J goto *HOUSYA,*KAIHO,*KONGOU,*OWARI
'
*HOUSYA:'-------放射ST---------
locate 20,8:print"*** 作 業 メニュウ- ***"
gosub *MENU1
on I goto *NYURYOKU1,*SYUSEI1,*KEISAN1,*SENTAKU1
'
*NYURYOKU1:J0=0
cls:locate 10,4:input "出発点名          ";NN$
locate 10,6:input "始点      x,y   ";X1,Y1
*158:CLS:J0=J0+1
locate 10,8:input "点 名          ";N$(J0)
locate 10,10:input "次の点     x,y   ";X(J0),Y(J0)
locate 10,14:PRINT "次の点の入力 -----1 "
locate 10,16:print "終  了 --------2 "
locate 15,18:input "番号指定 ";I
on I goto *158,*165
*165
goto *HOUSYA
'
*SYUSEI1:cls:'------修  正------
locate 25,3:PRINT "------修  正------ "
locate 20,6:print "始点 ---------1 "
locate 20,8:print "次の点 --------2 "
locate 20,10:print "終  了 --------3 "
locate 30,13:input "番号指定 ";I
on I goto *58,*59,*HOUSYA
*58
cls:locate 10,4:input "出発点名          ";NN$
locate 10,6:input "始点      x,y   ";X1,Y1:goto *SYUSEI1
'
*59:cls
locate 30,5:input "何番目か番号指定 ";J
locate 10,8:input "点 名          ";N$(J)
locate 10,10:input "次の点     x,y   ";X(J),Y(J):goto *SYUSEI1
'
*KEISAN1:'-----------計 算----------
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           座標による距離方向角の計算書(放射)":lprint:lprint:lprint
lprint "          測点  視点       X       Y        方向角       距 離 ":lprint
lprint using"           &    &       ######.####   ######.####  ";NN$,X1,Y1
for I=1 to J0
lprint:DX=X(I)-X1:DY=Y(I)-Y1:gosub *STSUB
BB(I)=TTT:SS(I)=SS
lprint using"           &    & &   & ######.####   ######.####  ####.#######  #####.#####";NN$,N$(I),X(I),Y(I),BB(I),SS(I)
next I
lprint chr$(12);
goto *HOUSYA
'
*KAIHO:'------開放ST--------
locate 15,8:print"*** 作 業 メニュウ- ***"
gosub *MENU1
on I goto *NYURYOKU2,*SYUSEI2,*KEISAN2,*SENTAKU1
'
*NYURYOKU2:J0=1
cls:locate 10,4:input "出発点名          ";N$(1)
locate 10,6:input "始点      x,y   ";X(1),Y(1)
*79:CLS:J0=J0+1
locate 10,8:input "点 名          ";N$(J0)
locate 10,10:input "次の点     x,y   ";X(J0),Y(J0)
locate 10,14:PRINT "次の点の入力 -----1 "
locate 10,16:print "終了 ---------2 "
locate 15,18:input "番号指定 ";I
on I goto *79,*KAIHO
goto *KAIHO
'
*SYUSEI2:cls:'------修  正------
locate 20,1:PRINT "------修  正------ "
locate 20,3:PRINT "修  正 --------1 "
locate 20,5:print "終  了 --------2 "
locate 30,7:input "番号指定 ";I
on I goto *94,*KAIHO
*94:locate 10,10:input "何番目か番号指定 ";J
locate 20,12:print "点名 ---------1 "
locate 20,14:print "X、Y --------2 "
locate 20,16:print "終了 ---------3 "
locate 30,18:input "番号指定 ";I
on I goto *97,*101,*KAIHO
'
*97:locate 20,20:input "点名          ";N$(J):goto *SYUSEI2
*101:locate 20,22:input "X、Y        ";X(J),Y(J):goto *SYUSEI2
'
*KEISAN2:'-----------計 算----------
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           座標による距離方向角の計算書(開放)":lprint:lprint:lprint
lprint "          測点  視点         X       Y        方向角        距 離 ":lprint
lprint using"           &    &       ######.####   ######.####  ";N$(1),X(1),Y(1)
for I=2 to J0
lprint:DX=X(I)-X(I-1):DY=Y(I)-Y(I-1):gosub *STSUB
BB(I)=TTT:SS(I)=SS
lprint using"           &    & &   & ######.####   ######.####  ####.#######  #####.#####";N$(I-1),N$(I),X(I),Y(I),BB(I),SS(I)
next I
lprint chr$(12);
goto *KAIHO
'
*KONGOU:'------放射と開放の混合計算-------
'
locate 15,8:print"*** 作 業 メニュウ- ***"
gosub *MENU1
on I goto *NYURYOKU2,*SYUSEI2,*KEISAN2,*SENTAKU1
'
*NYURYOKU2:J0=1
cls:locate 10,4:input "出発点名          ";N$(1)
locate 10,6:input "始点      x,y   ";X(1),Y(1)
*79:CLS:J0=J0+1
locate 10,8:input "点 名          ";N$(J0)
locate 10,10:input "次の点     x,y   ";X(J0),Y(J0)
locate 10,14:PRINT "次の点の入力 -----1 "
locate 10,16:print "終了 ---------2 "
locate 15,18:input "番号指定 ";I
on I goto *79,*KAIHO
goto *KAIHO
'
*SYUSEI2:cls:'------修  正------
locate 20,1:PRINT "------修  正------ "
locate 20,3:PRINT "修  正 --------1 "
locate 20,5:print "終  了 --------2 "
locate 30,7:input "番号指定 ";I
on I goto *94,*KAIHO
*94:locate 10,10:input "何番目か番号指定 ";J
locate 20,12:print "点名 ---------1 "
locate 20,14:print "X、Y --------2 "
locate 20,16:print "終了 ---------3 "
locate 30,18:input "番号指定 ";I
on I goto *97,*101,*KAIHO
'
*97:locate 20,20:input "点名          ";N$(J):goto *SYUSEI2
*101:locate 20,22:input "X、Y        ";X(J),Y(J):goto *SYUSEI2
'
*KEISAN2:'-----------計 算----------
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           座標による距離方向角の計算書(混合)":lprint:lprint:lprint
lprint "          測点  視点         X       Y        方向角        距 離 ":lprint
lprint using"           &    &       ######.####   ######.####  ";N$(1),X(1),Y(1)
for I=2 to J0
lprint:DX=X(I)-X(I-1):DY=Y(I)-Y(I-1):gosub *STSUB
BB(I)=TTT:SS(I)=SS
lprint using"           &    & &   & ######.####   ######.####  ####.#######  #####.#####";N$(I-1),N$(I),X(I),Y(I),BB(I),SS(I)
next I
lprint chr$(12);
goto *KAIHO
'
'
*MENU1
cls:locate 20,8:print"*** 作 業 メニュウ- ***"
locate 25,12:print"デ-タの入力 ・・・・・・・1"
locate 25,14:print"デ-タの修正 ・・・・・・・2 "
locate 25,16:print"計算書の印刷 ・・・・・・・3 "
locate 25,18:print"作業の終了 ・・・・・・・・4 "
locate 35,21:input"番号を指定    ";I
if I<1 or I>4 then *MENU1
return
'
'
*STSUB:'---------ST SUB---------
SS=sqr(DX*DX+DY*DY):TD=atn(DY/(DX+EE)):TT=TD*RAA
if DX<0 then TT=TT+180#
if DY<0 then TT=TT+360#
if TT>360# then TT=TT-360#
if TT<0 then TT=TT+360#
TD=TT*RRA:TTT=fnDMS(TT)
return
'
'
*OWARI
'
end
 

*1:T-fix(T

*2:T-fix(T

*3:T-fix(T

*4:T-fix(T

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