14.2 円曲線の中間点計算   [もくじへ] [トップページへ] [前ページへ]

===================================================

プログラム例題28

円曲線を設置後の中間点計算をおこなえ。

=========================================================

考え方

         

 

主要点が決まれば、これを使って中間点の計算になります。この計算に必要

なデータは、主要点の座標値、半径R、線形の向き(右カーブか左カーブ)、計

算開始点の測点番号(追加距離)などです。

中間点の番号は、100mごとの測点番号(ステーションNo.)で表したり、20m ご

との測点番号(No.)を用いて表します。

たとえば、

ステーションNo. 5 + 20.0000  は 5×100 + 20.0000 = 520.0000

20m ごとの No. 25 + 15.224525×20 + 15.2245 = 515.2245

を表します。

ここでは、ステーションNo.を用いることにします。

 

計算順序と計算式を示します。

(1)BPからBCの直線部の中間点の計算

   BPからBCへの方向角をα1、BPの測点番号を 5 + 45.2345 とします。

   No. 5 + 60 までの区間距離 L

     L = (5×100 + 60) - (5×100 + 45.2345)

   No. 5 + 60 の座標

     X = XBP + Lcosα1

     Y = YBP + Lsinα1

(2)曲線部の中間点の計算  

   円の半径をR、BCの測点番号を 8 + 12.5467 とします。

   円の中心MからBCへの方向角αM

     右カーブの場合

     αM = α1 + 90°

     左カーブの場合

     αM = α1 - 90°

   No. 8 + 20 までの区間距離 L

     L = (8×100 + 20) - (8×100 + 12.5467)

   No. 8 + 20 の座標

     右カーブの場合

     X = XM + Rcos(αM + L/R)

     Y = YM + Lsin(αM + L/R)

     左カーブの場合

     X = XM + Rcos(αM - L/R)

     Y = YM + Lsin(αM - L/R)

(3)ECからEPの直線部の中間点の計算    

   ECからEPへの方向角をα2、ECの測点番号を 9 + 23.1121 とします。

   No. 9 + 40 までの区間距離 L

     L = (9×100 + 40) - (9×100 + 23.1121)

   No. 9 + 40 の座標

     X = XEC + Lcosα2

     Y = YEC + Lsinα2

と計算すればいいのですが、区間距離 L を求めるには、もう少し検討する必

要があります。

計算する点が、BPからBCの直線部か、曲線部か、あるいはECからEPの直線

部かを判断しなければなりません。これには、つぎのような順序で計算すれば

いいでしょう。

   BPのステーションNo.より追加距離 LBP を計算する。

   BPとBCの距離に LBP を加え、BCの追加距離 LBC を計算する。

   曲線長 CL に LBC を加え、ECの追加距離 LEC を計算する。

   ECとEPの距離に LEC を加え、EPの追加距離 LEP を計算する。

   計算点の追加距離を LS とすると、

   LS = LBP + DL

   @  LS < LBC のとき

        初めてこの条件をはずれた時、BC点を計算

        BPからBCの直線部の中間点の計算

          LS = LS + DL

        @へもどる

   A LBC ≦ LS < LEC のとき

        初めてこの条件をはずれた時、EC点を計算

        LBC = LS のとき LS = LS + DL を求めた後、Aへもどる

        曲線部の中間点の計算

          LS = LS + DL

        Aへもどる

   B LEC ≦ LS < LEP のとき        

        初めてこの条件をはずれた時、EP点を計算

        LEC = LS のとき LS = LS + DL を求めた後、Bへもどる

        ECからEPの直線部の中間点の計算

          LS = LS + DL

        Bへもどる

   

 


プログラム

 

<HTML>
<HEAD>
   <TITLE>例題28(円曲線の中間点計算)</TITLE>

<SCRIPT LANGUAGE="VBScript">
<!--
' 入力データ
        Dim XBP,YBP          'BPの座標
        Dim XIP,YIP          'IPの座標
        Dim XEP,YEP          'EPの座標
        Dim RR               'R
'
        Dim SP               'ステーションピッチ
        Dim DL               '等間隔長
        Dim FN               'BP No.FN + SN
        Dim SN               '
        Dim BPT              'BPの追加距離
        Dim BCT              'BCの追加距離
        Dim ECT              'ECの追加距離
        Dim EPT              'EPの追加距離
        Dim n                '中間点数
'
        XBP = -51274.2779
        YBP = -31305.5806
        XIP = -51813.3467
        YIP = -31423.3201
        XEP = -52144.8230
        YEP = -31551.5362
        RR = 2000
'
        SP = 100
        DL = 20
        FN = 0
        SN = 0
'
' 出力データ
        Dim XBC,YBC          'BCの座標
        Dim XEC,YEC          'ECの座標
        Dim XSP,YSP          'SPの座標
        Dim XM,YM            'Mの座標
        Dim IA               'IA
        Dim CL               'CL
        Dim AL1,AL2          'α1,α2
        Dim L1,L2            'L1,L2
        Dim TL               'TL
        Dim SL               'SL
'
        Dim TK(500)          '中間点の追加距離
        Dim CX(500)          '中間点のX座標
        Dim CY(500)          '中間点のY座標
        Dim SA(500)          '中間点の接線方向角
        Dim GA(500)          '中間点の弦方向角
        Dim GL(500)          '中間点間の直線距離
'
'
'
'
        Dim PI
        PI = 3.141592653589793
'
'
        Function Dist(xa, ya, xb, yb)
                Dim ss
'
                ss = Sqr((xb-xa)^2 + (yb - ya)^2)
                Dist = ss
'
        End Function
'
'
        Function Alph(xa, ya, xb, yb)
                Dim dx, dy
                Dim Thi              'Atn(dy/dx)
'
                dx = xb - xa
                dy = yb - ya
'
                If dx = 0 Then
                     If dy = 0 Then Alph = 0
                     If dy > 0 Then Alph = PI/2
                     If dy < 0 Then Alph = PI*3/2
                End If
'
                If dx <> 0 Then Thi = Atn(dy/dx)
'
                If dx > 0 Then
                     Alph = Thi + 2*PI
                End If
'
                If dx < 0 Then
                     Alph = Thi + PI
                End If
'
                If Alph >= 2*PI Then Alph = Alph - 2*PI
'
        End Function
'
'
'  角度の変換(秒を度分秒に)
'
        Function Byodfb( x, doo, fun, byo )
                IF x<0 Then x = x + 1296000
                doo = Int(x/3600)
                fun = Int((x - doo*3600)/60)
                byo = x - doo*3600 - fun*60
                IF byo<0 Then byo = 0
        End Function
'
'
'  四捨五入
'
        Function Rund(x,y)
                Dim sg
                If x>=0 Then sg = 1 Else sg =-1
                Rund = sg*Int(abs(x)*10^y + 0.5)/10^y
        End Function
'
'
'  追加距離をステーションNo.に変換
'
        Function Sta(x,fs,es)
                fs = Int(x/SP)
                es = Rund(x - fs*SP,4)
        End Function
'
'
                '計算ボタンをクリック
'
        Sub CAL_OnClick
                Dim x1,y1,x2,y2      'プロシージャ引数
                Dim i                '中間点カウント  
'
                'α1, α2, L1, L2
                x1 = XBP
                y1 = YBP
                x2 = XIP
                y2 = YIP
                AL1 = Alph(x1,y1,x2,y2)
                L1 = Dist(x1,y1,x2,y2)
                x1 = XIP
                y1 = YIP
                x2 = XEP
                y2 = YEP
                AL2 = Alph(x1,y1,x2,y2)
                L2 = Dist(x1,y1,x2,y2)
'
                'IA
                IA = AL2 - AL1
                If IA<0 Then IA = IA + 2*PI
'
                'TL
                TL = Abs(RR)*tan(IA/2)
'
                'BC
                XBC = XBP + (L1-TL)*cos(AL1)
                YBC = YBP + (L1-TL)*sin(AL1)
'
                'EC
                XEC = XIP + TL*cos(AL2)
                YEC = YIP + TL*sin(AL2)
'
                'M
                If RR>0 Then
                   XM = XBC + RR*cos(AL1+PI/2)
                   YM = YBC + RR*sin(AL1+PI/2)
                Else
                   XM = XBC + Abs(RR)*cos(AL1-PI/2)
                   YM = YBC + Abs(RR)*sin(AL1-PI/2)
                End If
'
                'SL
                SL = Abs(RR)/cos(IA/2) - Abs(RR)
'
                'SP
                If RR>0 Then
                   XSP = XIP + SL*cos(AL1+PI/2+IA/2)
                   YSP = YIP + SL*sin(AL1+PI/2+IA/2)
                Else
                   XSP = XIP + SL*cos(AL1-PI/2-IA/2)
                   YSP = YIP + SL*sin(AL1-PI/2-IA/2)
                End If
'
                'CL
                CL = Abs(RR)*IA
'
'
'
'
'========================= 中間点計算 =====================================
'
'        TK()          '中間点の追加距離
'        CX()          '中間点のX座標
'        CY()          '中間点のY座標
'        SA()          '中間点の接線方向角
'        GA()          '中間点の弦方向角(後ろの点からの)
'        GL()          '中間点間の直線距離(後ろの点からの)
'
'      追加距離
                BPT = FN*SP + SN
                BCT = BPT + L1 - TL
                ECT = BCT + CL
                EPT = ECT + L2 - TL
'
'      BP
                Ls = BPT
                i = 1
                TK(i) = Ls
                CX(i) = XBP
                CY(i) = YBP
                SA(i) = AL1
                GA(i) = 0
                GL(i) = 0
'
'      BP<BC
                Ls = Int(Ls/DL)*DL + DL
'
                Do While Ls<BCT
                   i = i + 1
                   TK(i) = Ls
                   CX(i) = XBP + (Ls - BPT)*cos(AL1)
                   CY(i) = YBP + (Ls - BPT)*sin(AL1)
                   SA(i) = AL1
                   GA(i) = AL1
                   GL(i) = TK(i)-TK(i-1)
                   Ls = Ls + DL
                Loop
'
'      BC
                If Ls <> BCT Then
                   i = i + 1
                   TK(i) = BCT
                   CX(i) = XBC
                   CY(i) = YBC
                   SA(i) = AL1
                   GA(i) = AL1
                   GL(i) = TK(i)-TK(i-1)
                End If
'
'      BC<EC (円区間)
                Do While Ls<ECT
                   i = i + 1
                   TK(i) = Ls
                   If RR>0 Then
                      CX(i) = XM + RR*cos(AL1 - PI/2 + (Ls - BCT)/RR)
                      CY(i) = YM + RR*sin(AL1 - PI/2 + (Ls - BCT)/RR)
                   Else
                      CX(i) = XM + Abs(RR)*cos(AL1 + PI/2 + (Ls - BCT)/RR)
                      CY(i) = YM + Abs(RR)*sin(AL1 + PI/2 + (Ls - BCT)/RR)
                   End If
                   SA(i) = AL1 + (Ls - BCT)/RR
                   x1 = CX(i-1)
                   y1 = CY(i-1)
                   x2 = CX(i)
                   y2 = CY(i)
                   GA(i) = Alph(x1,y1,x2,y2)
                   GL(i) = Dist(x1,y1,x2,y2)
                   Ls = Ls + DL
                Loop
'
'      EC
                If Ls<>ECT Then
                   i = i + 1
                   TK(i) = ECT
                   CX(i) = XEC
                   CY(i) = YEC
                   SA(i) = AL2
                   x1 = CX(i-1)
                   y1 = CY(i-1)
                   x2 = CX(i)
                   y2 = CY(i)
                   GA(i) = Alph(x1,y1,x2,y2)
                   GL(i) = Dist(x1,y1,x2,y2)
                End If
'
'      EC<EP
                Do While Ls<EPT
                   i = i + 1
                   TK(i) = Ls
                   CX(i) = XEC + (Ls - ECT)*cos(AL2)
                   CY(i) = YEC + (Ls - ECT)*sin(AL2)
                   SA(i) = AL2
                   GA(i) = AL2
                   GL(i) = TK(i)-TK(i-1)
                   Ls = Ls + DL
                Loop
'
'      EP
                If Ls<>EPT Then
                   Ls = EPT
                   n = i + 1
                   TK(n) = Ls
                   CX(n) = XEP
                   CY(n) = YEP
                   SA(n) = AL2
                   GA(n) = AL2
                   GL(n) = TK(i)-TK(i-1)
                End If
'
                En
'
        End Sub
'
'
'
Sub En
      Dim i, r
      Dim sta1, sta2
'
'
'=================== 円曲線設置計算結果出力 ================================
'
      document.write "<CENTER>","*** 円曲線設置計算 ***","</CENTER><BR>"
'
      document.write"<CENTER><TABLE BORDER='0'>"
      document.write"<TR ALIGN='CENTER'>"
      document.write"<TD ALIGN='right'>","   IA","</TD>"
      r = Byodfb(IA*648000/PI,doo,fun,byo)
      byo = Rund(byo,2)
      document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
      document.write"<TD ALIGN='right'>","    R","</TD>"
      document.write"<TD ALIGN='right'>",RR,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'>"
      document.write"<TD ALIGN='left'>","曲線の要素","</TD></TR>"
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   TL","</TD>"
      TL = Rund(TL,4)
      document.write"<TD ALIGN='right'>",TL,"</TD>"
      document.write"<TD ALIGN='right'>","  (M) X","</TD>"
      XM = Rund(XM,4)
      document.write"<TD ALIGN='right'>",XM,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   CL","</TD>"
      CL = Rund(CL,4)
      document.write"<TD ALIGN='right'>",CL,"</TD>"
      document.write"<TD ALIGN='right'>","    Y","</TD>"
      YM = Rund(YM,4)
      document.write"<TD ALIGN='right'>",YM,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","  CL/2","</TD>"
      r = Rund(CL/2,4)
      document.write"<TD ALIGN='right'>",r,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   SL","</TD>"
      SL = Rund(SL,4)
      document.write"<TD ALIGN='right'>",SL,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'>"
      document.write"<TD ALIGN='left'>","曲線の主要点座標","</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","  NAME","</TD>"
      document.write"<TD ALIGN='right'>","    X    ","</TD>"
      document.write"<TD ALIGN='right'>","    Y    ","</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   BC","</TD>"
      XBC = Rund(XBC,4)
      document.write"<TD ALIGN='right'>",XBC,"</TD>"
      YBC = Rund(YBC,4)
      document.write"<TD ALIGN='right'>",YBC,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   SP","</TD>"
      XSP = Rund(XSP,4)
      document.write"<TD ALIGN='right'>",XSP,"</TD>"
      YSP = Rund(YSP,4)
      document.write"<TD ALIGN='right'>",YSP,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   EC","</TD>"
      XEC = Rund(XEC,4)
      document.write"<TD ALIGN='right'>",XEC,"</TD>"
      YEC = Rund(YEC,4)
      document.write"<TD ALIGN='right'>",YEC,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   IP","</TD>"
      XIP = Rund(XIP,4)
      document.write"<TD ALIGN='right'>",XIP,"</TD>"
      YIP = Rund(YIP,4)
      document.write"<TD ALIGN='right'>",YIP,"</TD></TR>"
'
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   α1","</TD>"
      r = Byodfb(AL1*648000/PI,doo,fun,byo)
      byo = Rund(byo,2)
      document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD></TR>"
      document.write"<TR ALIGN='CENTER'><TD ALIGN='right'>","   α2","</TD>"
      r = Byodfb(AL2*648000/PI,doo,fun,byo)
      byo = Rund(byo,2)
      document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD></TR>"
      document.write"</TABLE>"
      document.write"</TABLE>"
      document.write"<BR>"
      document.write"<BR>"
'
'
'========================= 中間点計算出力 ==================================
'
      document.write "<CENTER>","*** 中間点計算 ***","</CENTER><BR>"
'
      document.write"<CENTER><TABLE BORDER='0'>"
      document.write"<TR ALIGN='CENTER'>"
      document.write"<TD ALIGN='left'>","STA.No.","</TD>"
      document.write"<TD ALIGN='center'>","X","</TD>"
      document.write"<TD ALIGN='center'>","Y","</TD>"
      document.write"<TD ALIGN='right'>","S","</TD>"
      document.write"<TD ALIGN='right'>","弦方向角","</TD>"
      document.write"<TD ALIGN='right'>","接線方向角","</TD>"
      document.write"</TR>"
'
      For i = 1 to n
      document.write"<TR ALIGN='CENTER'>"
      r = Sta(TK(i),sta1,sta2)
      document.write"<TD ALIGN='left'>",sta1 & "+" & sta2,"</TD>"
      CX(i) = Rund(CX(i),4)
      CY(i) = Rund(CY(i),4)
      document.write"<TD ALIGN='right'>",CX(i),"</TD>"
      document.write"<TD ALIGN='right'>",CY(i),"</TD>"
      GL(i) = Rund(GL(i),4)
      document.write"<TD ALIGN='right'>",GL(i),"</TD>"
      r = Byodfb(GA(i)*648000/PI,doo,fun,byo)
      byo = Rund(byo,1)
      document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
      r = Byodfb(SA(i)*648000/PI,doo,fun,byo)
      byo = Rund(byo,1)
      document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD></TR>"
      Next
      document.write"</TABLE>"
End Sub
'
-->
</SCRIPT>

</HEAD>


<BODY>


<FORM NAME="Form1">
 *** 円曲線設置計算 ***<BR>
<BR>
<INPUT TYPE="button" NAME="CAL" VALUE="計 算">
<HR>

</FORM>



</BODY>
</HTML>


入力データと実行結果

     入力データ

      BPの座標
            XBP = -51274.2779
            YBP = -31305.5806
      IPの座標
            XIP = -51813.3467
            YIP = -31423.3201
      EPの座標
            XEP = -52144.8230
            YEP = -31551.5362
      半径
            RR = 2000.0000
          ステーションピッチ
        SP = 100
      等間隔長
            DL = 20
      計算開始点の追加距離
            No. 0 + 0

     ※データ入力は、代入文で直接代入しています。

     ※ボタンをクリックして実行します。

 

     計算結果の一部

  

 


プログラムの説明

曲線設置のプログラムに、中間点計算のプログラムを追加する形で作成して

あります。

VBScript では、データファイルが作れないので(クッキーという特別なファイル

は使えます)、設置計算から連続して計算した方が、データ入力の手間がはぶ

けます。

そのため、プログラムがかなり長くなりデバッグ(虫取り)も難しくなるので、な

るべく注釈を多く入れた方がいいでしょう。

 

Dim SP               'ステーションピッチ
Dim DL
               '等間隔長
Dim FN
               'BP No.FN + SN
Dim SN
               '
Dim BPT
              'BPの追加距離
Dim BCT
              'BCの追加距離
Dim ECT
              'ECの追加距離
Dim EPT
              'EPの追加距離
Dim n
                '中間点数

中間点計算で追加した、グローバル変数です。グローバルにするのは、どの

プロシージャからも使えるようにするためです。変数名はなるべく分かりやす

い名前にした方がいいですが、あまり長すぎるとスペルミスにつながりますの

で注意して下さい。

'  追加距離をステーションNo.に変換
'
Function Sta(x,fs,es)
        fs = Int(x/SP)
        es = Rund(x - fs*SP,4)
End Function

追加距離をステーションNo.に変換するプロシージャです。端数は、小数第4位

に丸めるように、四捨五入のプロシージャを呼び出しています。

このように、プロシージャの中から他のプロシージャも呼び出すこともできるの

です。

'========================= 中間点計算 =====================================
'
'        TK()          '中間点の追加距離
'        CX()          '中間点のX座標
'        CY()          '中間点のY座標
'        SA()          '中間点の接線方向角
'        GA()          '中間点の弦方向角(後ろの点からの)
'        GL()          '中間点間の直線距離(後ろの点からの)
'
'      追加距離
                BPT = FN*SP + SN
                BCT = BPT + L1 - TL
                ECT = BCT + CL
                EPT = ECT + L2 - TL

中間点計算の始めの部分です。プログラムが長くなると、個々の変数名を覚

えておくのは大変なので、注釈を入れます。

追加距離は、主要点の追加距離です。計算中の追加距離と主要点の追加

距離を比較して、直線部か曲線部かを判定するときに、この値が必要になり

ます。

 

'      BP
Ls = BPT
i = 1
TK(i) = Ls
CX(i) = XBP
CY(i) = YBP
SA(i) = AL1
GA(i) = 0
GL(i) = 0
'
'      BP<BC
Ls = Int(Ls/DL)*DL + DL
'
Do While Ls<BCT
   i = i + 1
   TK(i) = Ls
   CX(i) = XBP + (Ls - BPT)*cos(AL1)
   CY(i) = YBP + (Ls - BPT)*sin(AL1)
   SA(i) = AL1
   GA(i) = AL1
   GL(i) = TK(i)-TK(i-1)
   Ls = Ls + DL
Loop

BPからBC部の計算です。弦長と弦方向角は、前点からの値です。そのため、

開始点では、どちらもにしてあります。

変数 Ls は、計算中の点の追加距離です。結果表示のときにステーションNo.

に変換します。

'      BC
If Ls <> BCT Then
   i = i + 1
   TK(i) = BCT
   
CX(i) = XBC
   
CY(i) = YBC
   SA(i) = AL1
   GA(i) = AL1
   GL(i) = TK(i)-TK(i-1)
End If
'
'      BC<EC (円区間)
Do While Ls<ECT
   i = i + 1
   TK(i) = Ls
   If RR>0 Then
     CX(i) = XM + RR*cos(AL1 - PI/2 + (Ls - BCT)/RR)
     CY(i) = YM + RR*sin(AL1 - PI/2 + (Ls - BCT)/RR)
   Else
      CX(i) = XM + Abs(RR)*cos(AL1 + PI/2 + (Ls - BCT)/RR)
      CY(i) = YM + Abs(RR)*sin(AL1 + PI/2 + (Ls - BCT)/RR)
   End If
   SA(i) = AL1 + (Ls - BCT)/RR
   x1 = CX(i-1)
   y1 = CY(i-1)
   x2 = CX(i)
   y2 = CY(i)
   GA(i) = Alph(x1,y1,x2,y2)
   GL(i) = Dist(x1,y1,x2,y2)
   Ls = Ls + DL
Loop

BCからEC部の計算です。右カーブか左カーブかで、計算式が異なる部分で

す。

接線方向角 SA(i) は、半径 RR の符号を使って1つの式で表せます。

弦方向角 GA(i) と弦長 GL(i) は2点の座標から求めています。

'      EC
If Ls<>ECT Then
   i = i + 1
   TK(i) = ECT
   CX(i) = XEC
   CY(i) = YEC
   SA(i) = AL2
   x1 = CX(i-1)
   y1 = CY(i-1)
   x2 = CX(i)
   y2 = CY(i)
   GA(i) = Alph(x1,y1,x2,y2)
   GL(i) = Dist(x1,y1,x2,y2)
End If
'
'      EC<EP
Do While Ls<EPT
   i = i + 1
   TK(i) = Ls
   CX(i) = XEC + (Ls - ECT)*cos(AL2)
   CY(i) = YEC + (Ls - ECT)*sin(AL2)
   SA(i) = AL2
   GA(i) = AL2
   GL(i) = TK(i)-TK(i-1)
   Ls = Ls + DL
Loop
'
'      EP
If Ls<>EPT Then
   Ls = EPT
   n = i + 1
   TK(n) = Ls
   CX(n) = XEP
   CY(n) = YEP
   SA(n) = AL2
   GA(n) = AL2
   GL(n) = TK(i)-TK(i-1)
End If

ECからEP部までの計算です。変数 n は、計算された中間点の総数です。

計算結果の出力は、設置計算の後に追加しました。


[もくじへ] [トップページへ]

 りょうかんのアドバイス

ちょっと難しいでしたね。特に、計算する点が始めの直線部、曲線部、後の直

線部のどの部分に属するのかを判別するのが難しかったと思います。

こういう時、役に立つのがフローチャートです。りょうかんも複雑な計算のとき

には、フローチャートを書きます。今回は、フローチャートを書けば便利なんだ

がと思いながら、結局最後まで書きませんでした。面倒くさいのはやっぱりだ

めです。

しかし、皆さんはいま勉強中です。プログラミングの専門書で、しっかり勉強し

てください。フローチャートはプログラミングの基礎です。

また、このようにプログラムが長くなってくると、プログラムミスを探すのがたい

へんです。プログラムを入力したら、まず保存してから実行します。このとき、

プログラムに文法的なエラーがあると、エラーのある行を知らせてくれますが、

注釈で行番号をところどころに入れておくと便利です。

 

次回は、『巾杭計算』の予定です。(10月25日ごろ)

この講座に対する、ご意見やご要望はメールでお願いします。

      『VBScriptによる測量計算プログラミング入門』 

                                講師 りょうかん


[もくじへ] [トップページへ] [次ページへ]