大網白里ジオソフトTOP  > 製品紹介  > 「曲線1」・「曲線2」の説明  > 「曲線1」・「曲線2」のソースコード主要部分の説明

「曲線1」・「曲線2」のソースコード主要部分の説明



・曲線1のソースコード主要部分の説明



作図の中心となるコードは、 フォーム curve1.frm の cmdOK オブジェクトの Click プロシージャと、 フォーム curve1.frm の(General)オブジェクトの Circle_Draw プロシージャ とに書かれています。
また、主な変数の定義は、 フォーム curve1.frm の(General)オブジェクトの(declaration)プロシージャ で行なわれています。


変数の定義
フォーム curve1.frm の(General)オブジェクトの(declaration)プロシージャには、 次の記述があります。
ここの説明用には、本文にはある「データ記入フラグ」と「ゆっくり作図用変数」は、省略します。

Option Explicitは必ず必要というものではありませんが、 変数名の混乱が、プログラムの欠陥に関わる恐らく最大の原因だろうと思われますので、 質の高いプログムラムの製作を目指す上では欠かせない1文です。

'変数の明示的な宣言を強制する
Option Explicit
'
'モジュールの共通変数
Dim DELTA As Single
Dim R0 As Single
Dim THS As Single
Dim ALS As Single
Dim N As Single
'
'fore_color
Dim red As Single
Dim green As Single
Dim blue As Single
'
Dim PI As Single
'
Dim public_W0 As Single
'
'



Private Sub cmdOK_Click()
本文をそのまま書くと、 データが揃っているかのチェックや、 「ゆっくり作図」に関する処理や、 途中経過のテキストボックス表示などの処理が入って複雑になっており、 わかりにくいので、ここでは、これらの処理のコードを省いたコードを お見せします。
最後の方のSelect Case 文で、曲線番号ごとの振り分けを行なっています。
各曲線の式は、各Case文に書かれています。


Private Sub cmdOK_Click()
  '
  '
  '円上を中心とした曲線をピクチャーボックスpic1に描く
  '
  '
  Dim DELTA0 As Single
  Dim WHratio, W0 As Single
  Dim v As Single
  '
  Dim c As Long
  Dim TH As Single
  Dim TH0 As Single
  Dim R As Single
  Dim A As Single
  Dim B As Single
  '
  PI = 3.14162
  DELTA0 = DELTA * PI / 180
  '
  '
  '縦を-100〜100の200目盛りとし、横の目盛りをそれに合わせて決める
  WHratio = Abs(pic1.ScaleWidth / pic1.ScaleHeight)
  W0 = 100 * WHratio
  public_W0 = W0
  '
  pic1.Scale (-W0, 100)-(W0, -100)
  '
  '画面をカレントの背景色で塗り潰す
  pic1.Line (-W0, -100)-(W0, 100), CurrentBackColor, BF
  '
  '表示コードの色をカレントカラー(線色)にする
  v = Val("&H" + txtRED.Text)
  If v > 256 Then v = 0
  red = v
  '
  v = Val("&H" + txtGREEN.Text)
  If v > 256 Then v = 0
  green = v
  '
  v = Val("&H" + txtBLUE.Text)
  If v > 256 Then v = 0
  blue = v
  '
  c = RGB(red, green, blue)
  CurrentColor = c   '[ CurrentColor は BGRの順番のコード }
  '
  '模様の作図
  If N > 15 Or N < 1 Then N = 1
  N = Int(N)
  '
  '
  '作図本体
  For TH = 0 To 360 Step THS
      '
      TH0 = TH * PI / 180
      '
      Select Case N
          '
          Case 1: R = R0 * Sin(TH0)
          Case 2: R = 2 * R0 * Sin(TH0 / 2)
          Case 3: R = R0 * Cos(TH0)
          Case 4: R = 2 * R0 * Cos(TH0 / 2)
          Case 5: R = R0 * (1 - Cos(TH0))
          Case 6: R = R0 * (1 - Sin(TH0))
          Case 7: R = R0 * Abs(Sin(2 * TH0))
          Case 8: R = R0 * Abs(Cos(2 * TH0))
          Case 9: R = R0 * Sin(TH0 / 4)
          Case 10: R = R0 * Cos(TH0 / 4)
          Case 11: R = R0 * Sin(3 * TH0)
          Case 12: R = R0 * Cos(3 * TH0)
          Case 13: R = R0 * 2 * (1 - Cos(TH0))
          Case 14: R = R0 * 2 * (1 - Sin(TH0))
          '
          Case Else 'nop (no operation)
          '
      End Select
      A = R0 * Sin(TH0)
      B = R0 * Cos(TH0) * Cos(DELTA0)
      '
      Call Circle_Draw(A, B, R, R0, ALS, c)
      '
  Next TH
  '
End Sub



Sub Circle_Draw()
小円(または多角形)の作図の実際は、次のサブルーチンで行なわれています。
各変数の前に付ける Byval と ByRef の宣言も必ず必要というものではありませんが、 変数の値の変化によるプログラム・ミスを防ぐ意味で明示した方が良いので、つけてあります。


Sub Circle_Draw(ByVal A, ByVal B, ByVal R, ByVal R0, ByVal ALS, ByVal c)
'
'円の作図
'
Dim AL As Single
Dim AL0 As Single
Dim X, Y, X_, Y_ As Single

'
If R = 0 Then Exit Sub
'
For AL = 0 To 360 + ALS Step ALS
   AL0 = AL * PI / 180
   X = R * Cos(AL0) + A
   Y = R * Sin(AL0) + B
   If AL = 0 Then
         X_ = X
         Y_ = Y
   End If
   '
   pic1.Line (X_, Y_)-(X, Y), c
   '
   X_ = X
   Y_ = Y
   '
   '
Next AL
'
End Sub



・曲線2のソースコード主要部分の説明



作図の中心となるコードは、 フォーム curve2.frm の cmdOK オブジェクトの Click プロシージャと、 フォーム curve2.frm の (General) オブジェクトの Circle_Draw プロシージャ とに書かれています。
また、主な変数の定義は、 フォーム curve2.frm の(General)オブジェクトの(declaration)プロシージャ で行なわれています。


変数の定義
フォーム curve2.frm の(General)オブジェクトの(declaration)プロシージャには、 次の記述があります。
ここの説明用には、本文にはある「データ記入フラグ」と「ゆっくり作図用変数」は、省略します。

Option Explicitは必ず必要というものではありませんが、 変数名の混乱が、プログラムの欠陥に関わる恐らく最大の原因だろうと思われますので、 質の高いプログムラムの製作を目指す上では欠かせない1文です。



'変数の明示的な宣言を強制する
Option Explicit
'
'モジュールの共通変数
Dim DELTA As Single
Dim R0 As Single
Dim THS As Single
Dim ALS As Single
Dim N As Single
Dim K As Single
Dim M As Single
'
Dim red As Single
Dim green As Single
Dim blue As Single
'
Dim PI As Single
'
Dim public_W0 As Single
'


Private Sub cmdOK_Click()
本文をそのまま書くと、 データが揃っているかのチェックや、 「ゆっくり作図」に関する処理や、 途中経過のテキストボックス表示などの処理が入って複雑になっており、 わかりにくいので、ここでは、これらの処理のコードを省いたコードを お見せします。
最後の方のSelect Case 文で、曲線番号ごとの振り分けを行なっています。
各曲線の式は、各Case文に書かれています。


Private Sub cmdOK_Click()
  '
  '
  '螺旋上を中心とした曲線
  '
  Dim DELTA0 As Single
  Dim WHratio As Single
  Dim W0 As Single
  '
  Dim v As Single
  Dim c As Long
  '
  Dim TH, TH0, R As Single
  Dim A, B As Single
  '
  PI = 3.14162
  DELTA0 = DELTA * PI / 180
  '
  '
  '縦を-100〜100の200目盛りとし、横の目盛りをそれに合わせて決める
  WHratio = Abs(pic1.ScaleWidth / pic1.ScaleHeight)
  W0 = 100 * WHratio
  public_W0 = W0
  '
  pic1.Scale (-W0, 100)-(W0, -100)
  '
  '画面をカレントの背景色で塗りつぶす。
  pic1.Line (-W0, -100)-(W0, 100), CurrentBackColor, BF
  '
  '表示コードの色をカレントカラー(線色)にする
  v = Val("&H" + txtRED.Text)
  If v > 256 Then v = 0
  red = v
  '
  v = Val("&H" + txtGREEN.Text)
  If v > 256 Then v = 0
  green = v
  '
  v = Val("&H" + txtBLUE.Text)
  If v > 256 Then v = 0
  blue = v
  '
  c = RGB(red, green, blue)
  CurrentColor = c  ' [CurrentColor は BGRの順番のコード]
  '
  '模様の作図
  If N > 15 Or N < 1 Then N = 1
  N = Int(N)
  '
  '作図本体
  For TH = 0 To 360 * M Step THS
      '
      TH0 = TH * PI / 180
      R0 = K * TH0
      '
      Select Case N
          '
          Case 1: R = R0 * Sin(TH0)
          Case 2: R = 2 * R0 * Sin(TH0 / 2)
          Case 3: R = R0 * Cos(TH0)
          Case 4: R = 2 * R0 * Cos(TH0 / 2)
          Case 5: R = R0 * (1 - Cos(TH0))
          Case 6: R = R0 * (1 - Sin(TH0))
          Case 7: R = R0 * Abs(Sin(2 * TH0))
          Case 8: R = R0 * Abs(Cos(2 * TH0))
          Case 9: R = R0 * Sin(TH0 / 4)
          Case 10: R = R0 * Cos(TH0 / 4)
          Case 11: R = R0 * Sin(3 * TH0)
          Case 12: R = R0 * Cos(3 * TH0)
          Case 13: R = R0 * 2 * (1 - Cos(TH0))
          Case 14: R = R0 * 2 * (1 - Sin(TH0))
          '
          Case Else 'nop (no operation)
          '
      End Select
      '
      A = R0 * Sin(TH0)
      B = R0 * Cos(TH0) * Cos(DELTA0)
      '
      Call Circle_Draw(A, B, R, ALS, c)
      '
   Next TH
   '
End Sub


Sub Circle_Draw()
小円(または多角形)の作図の実際は、次のサブルーチンで行なわれています。
各変数の前に付ける Byval と ByRef の宣言も必ず必要というものではありませんが、 変数の値の変化によるプログラム・ミスを防ぐ意味で明示した方が良いので、つけてあります。
'

Sub Circle_Draw(ByVal A, ByVal B, ByVal R, ByVal ALS, ByVal c)
'
'円の作図
Dim AL, AL0 As Single
Dim X, Y As Single
Dim X_, Y_ As Single
'
If R = 0 Then Exit Sub
'
For AL = 0 To 360 + ALS Step ALS
   AL0 = AL * PI / 180
   X = R * Cos(AL0) + A
   Y = R * Sin(AL0) + B
   If AL = 0 Then
         X_ = X
         Y_ = Y
   End If
   pic1.Line (X_, Y_)-(X, Y), c
   X_ = X
   Y_ = Y
Next AL
'
End Sub




ここは 「曲線1」・「曲線2」のソースコード主要部分の説明 のページ です



「曲線1」・「曲線2」のソースコード主要部分の説明 ページ先頭へ



「曲線1」・「曲線2」の説明 ページへ




大網白里ジオソフトTOPページ へ