Реализовать рекурсивный алгоритм построения кривых Гильберта - VB

Узнай цену своей работы

Формулировка задачи:

Реализовать рекурсивный алгоритм построения кривых Гильберта.

Решение задачи: «Реализовать рекурсивный алгоритм построения кривых Гильберта»

textual
Листинг программы
' Кривая Гильберта состоит из четырех соединенных прямыми
' элементов: a, b, c и d. Каждый элемент строит
' соответствующая процедура.
 
Dim p As Integer        ' порядок кривой
Dim u As Integer        ' длина штриха
Dim size As Integer     ' размер кривой
 
' процедура рисует элемент a
Sub a(i As Integer)
   If i > 0 Then
      Call d(i - 1)
      Line -(CurrentX + u, CurrentY)
      Call a(i - 1)
      Line -(CurrentX, CurrentY + u)
      Call a(i - 1)
      Line -(CurrentX - u, CurrentY)
      Call c(i - 1)
   End If
End Sub
 
' процедура рисует элемент b
Sub b(i As Integer)
   If i > 0 Then
      Call c(i - 1)
      Line -(CurrentX - u, CurrentY)
      Call b(i - 1)
      Line -(CurrentX, CurrentY - u)
      Call b(i - 1)
      Line -(CurrentX + u, CurrentY)
      Call d(i - 1)
   End If
End Sub
 
' процедура рисует элемент c
Sub c(i As Integer)
   If i > 0 Then
      Call b(i - 1)
      Line -(CurrentX, CurrentY - u)
      Call c(i - 1)
      Line -(CurrentX - u, CurrentY)
      Call c(i - 1)
      Line -(CurrentX, CurrentY + u)
      Call a(i - 1)
   End If
End Sub
 
' процедура рисует элемент d
Sub d(i As Integer)
   If i > 0 Then
      Call a(i - 1)
      Line -(CurrentX, CurrentY + u)
      Call d(i - 1)
      Line -(CurrentX + u, CurrentY)
      Call d(i - 1)
      Line -(CurrentX, CurrentY - u)
      Call b(i - 1)
   End If
End Sub
 
' инициализация формы
Private Sub Form_Initialize()
   p = 5
   u = 7
   
   ' размер кривой (количество элементов по длине или ширине)
   ' определяется как 2 в степени p минус 1 (2^p - 1)
   size = 2
   For i = 1 To (p - 1)
      size = size * 2
   Next i
   size = size - 1
   
   Form1.Height = (Form1.Height - Form1.ScaleHeight) + _
                  (size + 2) * u * Screen.TwipsPerPixelY
   Form1.Width = (Form1.Width - Form1.ScaleWidth) + _
                 (size + 2) * u * Screen.TwipsPerPixelX
 
   Form1.ScaleMode = 3
End Sub
 
' обработка события Paint
Private Sub Form_Paint()
   Form1.CurrentX = u
   Form1.CurrentY = u
   
   ' вычерчивание кривой Гильберта
   Call a(p)
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы