Как "уговорить" Visual Basic 6.0 нарисовать такую Картинку? - VB

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

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

Здравствуйте!

Прошу помощи. Подскажите, пожалуйста, как "уговорить" Visual Basic 6.0 нарисовать такую Картинку, ниже.

Какие изменения надо внести в исходный код?

Сам код появился в 2007 году. Возможно, в ту пору не хватало умельцев, чтобы дать сюжету Вторую Жизнь. Исходный код
Листинг программы
  1. VERSION 5.00
  2. Begin VB.Form Form1
  3. Caption = "Form1"
  4. ClientHeight = 3030
  5. ClientLeft = 120
  6. ClientTop = 450
  7. ClientWidth = 4560
  8. LinkTopic = "Form1"
  9. ScaleHeight = 3030
  10. ScaleWidth = 4560
  11. StartUpPosition = 3 'Windows Default
  12. End
  13. Attribute VB_Name = "Form1"
  14. Attribute VB_GlobalNameSpace = False
  15. Attribute VB_Creatable = False
  16. Attribute VB_PredeclaredId = True
  17. Attribute VB_Exposed = False
  18. Option Explicit
  19. Option Base 0
  20. Dim Chislo_periodov As Single
  21. Sub TwelveNodes()
  22. If ThisDocument.Shapes.Count > 0 Then ThisDocument.Shapes(1).Delete 'удаление фигуры 1
  23. If ThisDocument.Shapes.Count > 0 Then ThisDocument.Shapes(1).Delete 'удаление фигуры 1 (оставшейся)
  24. ' Макрос записан 30.06.2007 User; запуск в документе Word: альт-D.
  25. Const pi = 3.1415926535898
  26. Dim k As Integer: k = 49 'количество приближающих дугу циклоиды сегментов
  27. If k < 1 Then Exit Sub
  28. Dim ShiftX: ShiftX = 50 'сдвиг (точек) вправо от угла листа
  29. Dim ShiftY: ShiftY = 10 'сдвиг (точек) вниз от угла листа
  30. Dim fi As Single 'полярная коодината (радиан)
  31. Dim A As Integer 'радиус неподвижного круга
  32. Dim x() As Single, y() As Single 'Декартовы коорд. точек (x: вправо, y: вниз от угла)
  33. Dim Nn As Single, N As Single, nS As String, begpoint, finpoint
  34. If Chislo_periodov <= 0 Then Chislo_periodov = 32 '31.6667
  35. nS = InputBox(vbLf & "Число периодов:", "Например: 42", Chislo_periodov)
  36. If IsNumeric(nS) = False Then Exit Sub
  37. N = CSng(nS) 'Val(nS)
  38. If N > 333 Then _
  39. If MsgBox(N & " требует долгого ожидания, боитесь?", vbYesNo) = vbYes Then Exit Sub
  40. Chislo_periodov = N
  41. If N < 0.01 Then Chislo_periodov = 55: Exit Sub
  42. ReDim x(k * N - 1)
  43. ReDim y(k * N - 1)
  44. fi = 8 * pi / N / k
  45. A = 43 * N
  46. 'A = 31 * N
  47. For Nn = 0 To k * N - 1
  48. x(Nn) = (A * Cos(Nn * fi) + A * Sin(A * Nn * fi)) / 3 + ShiftX + (1 - Cos(Nn * fi / 6)) * Nn * Cos(Nn * fi)
  49. y(Nn) = (A * Sin(Nn * fi) - A * Cos(A * Nn * fi)) / 3 + ShiftY + (1 - Cos(Nn * fi / 6)) * Nn * Sin(Nn * fi)
  50. ' If Nn = 0 Then InputBox vbCr & vbCr & vbCr & "начальная точка:", "(X; Y)", x(0) & ", " & y(0)
  51. Next Nn
  52. With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, x(0), y(0))
  53. For Nn = 1 To k * N - 1
  54. .AddNodes msoSegmentCurve, msoEditingAuto, x(Nn), y(Nn)
  55. Next Nn
  56. ' .AddNodes msoSegmentCurve, msoEditingAuto, x(0), y(0)
  57. .ConvertToShape.Select
  58. End With
  59. begpoint = Array(x(0), y(0)) 'начало полилинии
  60. finpoint = Array(x(k * N - 1), y(k * N - 1)) 'конец полилинии
  61. With ActiveDocument.Shapes
  62. .AddPolyline Array(begpoint, finpoint)
  63. .SelectAll
  64. ' .Range(.Item(1), .Item(2)).Group 'группировка фигур 1 и 2
  65. Selection.ShapeRange.Group.Select 'группировка выделенных фигур
  66. End With
  67. '
  68. With Selection.ShapeRange
  69. .Width = 240
  70. .Height = 240
  71. .Left = CentimetersToPoints(0)
  72. .Top = CentimetersToPoints(0)
  73. End With
  74. Chislo_periodov = Chislo_periodov - 1.5
  75. ActiveDocument.UndoClear 'это очистка списка откатов (он чудовищно велик)
  76. End Sub

Решение задачи: «Как "уговорить" Visual Basic 6.0 нарисовать такую Картинку?»

textual
Листинг программы
  1. Dim A, fi
  2. Dim Nn, k, N
  3. Dim X(), y()
  4. Dim x0, y0
  5. Sub TwelveNodes()
  6.  
  7. ReDim X(k * N - 1)
  8. ReDim y(k * N - 1)
  9.  
  10. A = 43 * N
  11.  
  12. For Nn = 0 To k * N - 1
  13. X(Nn) = (A * Sin(A * Nn * fi)) / 3 + (1 - Cos(Nn * fi / 6)) * Nn * Cos(Nn * fi)
  14. y(Nn) = (-A * Cos(A * Nn * fi)) / 3 + (1 - Cos(Nn * fi / 6)) * Nn * Sin(Nn * fi)
  15. Next Nn
  16.  
  17.  Nn = 0
  18.  'Timer1.Enabled = True
  19.  
  20.     'For Nn = 1 To k * N - 1
  21.    'Me.Line (x0 + x(Nn - 1), y0 + y(Nn - 1))-(x0 + x(Nn), y0 + y(Nn)), RGB(0, Nn * 255 / (k * N), (k * N - 1 - Nn) * 255 / (k * N))
  22.    'Next Nn
  23.  
  24. End Sub
  25.  
  26. Private Sub Draw_3d()
  27. Dim X
  28. Randomize
  29. Z1 = Int(100 * Rnd)
  30.  For X = 0 To 200
  31.         Draw3dTxt 300 + X - X1, X - Y1, " Sasha Smirnov, kliknite levoy knokoy myshki po ekranu!", X, X, X, Z1
  32.  Next X
  33. End Sub
  34.  
  35. Private Sub Draw3dTxt(ByVal start_x As Single, ByVal start_y As Single, ByVal txt As String, r, g, b, Z)
  36.     CurrentX = start_x
  37.     CurrentY = start_y
  38.     Font.Size = 28
  39.         ForeColor = RGB(r + Z, g + Z, b + Z)
  40.         Print txt
  41. End Sub
  42.  
  43. Private Sub Form_Activate()
  44. Timer1.Enabled = False
  45. Timer1.Interval = 1
  46. AutoRedraw = True
  47. WindowState = 2
  48. Print ".............Sasha_Smirnov...kliknite levoy knokoy myshki po ekranu..! "
  49. End Sub
  50.  
  51. Private Sub Form_Click()
  52. Dim Pi
  53. Cls
  54.  
  55. Draw_3d ' äîáГ*ГўГЎ ñòðî÷êó âûçîâГ* ïðîöåäóðû
  56. Me.Print ".............Sasha_Smirnov "
  57. x0 = Me.Width / 2: y0 = Me.Height / 2
  58. Pi = 4 * Atn(1)
  59. k = Int(Rnd * 5) + 47
  60. N = 54 'Int(Rnd * 10) + 50
  61. fi = 8 * Pi / N / k
  62. TwelveNodes
  63. Timer1.Enabled = True
  64. End Sub
  65.  
  66. Private Sub Timer1_Timer()
  67.  If Nn < k * N - 10 Then
  68.  
  69. cl = Nn * 255 / (k * N)
  70.  
  71.  For i = Nn + 1 To Nn + 10
  72.     Me.Line (x0 + X(i - 1), y0 + y(i - 1))-(x0 + X(i), y0 + y(i)), RGB(cl, 0, 255 - cl)
  73. Next i
  74.    Nn = Nn + 10
  75. Else
  76.     Timer1.Enabled = False
  77.  End If
  78. End Sub

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


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

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

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы