Оставить программу движения на экране точки, оставляющей светящийся след - VB

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

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

Составить программу движения на экране точки, оставляющей светящийся след, которая движется по орбите увеличивающегося: а)квадрата; б)окружности; в) треугольника.

Решение задачи: «Оставить программу движения на экране точки, оставляющей светящийся след»

textual
Листинг программы
  1. Private Type Vec
  2.     X As Double
  3.     Y As Double
  4. End Type
  5. Private Const Speed As Single = 0.05
  6. Private Const RelCount As Long = 70
  7. Dim WithEvents cboType As ComboBox
  8. Dim WithEvents tmrTimer As Timer
  9. Dim Pt As Vec, Rel() As Vec, Dir As Vec, Size As Double
  10.  
  11. Private Sub Iteration()
  12.     Dim flip As Boolean
  13.     Pt.X = Pt.X + Dir.X: Pt.Y = Pt.Y + Dir.Y
  14.     If Pt.X > 1 Then Pt.X = 1: flip = True
  15.     If Pt.Y > 1 Then Pt.Y = 1: flip = True
  16.     If Pt.X < -1 Then Pt.X = -1: flip = True
  17.     If Pt.Y < -1 Then Pt.Y = -1: flip = True
  18.     Select Case cboType.ListIndex
  19.     Case 0: If flip Then Dir = Rot(Dir, 1.5707963267949)
  20.     Case 1: If flip Then Dir = Rot(Dir, 2.0943951023932)
  21.     Case 2: Pt = Rot(Pt, Speed)
  22.     End Select
  23. End Sub
  24. Private Function ToScreen(Pt As Vec) As Vec
  25.     ToScreen.X = Pt.X * Me.ScaleWidth / 4 * Size + Me.ScaleWidth / 2
  26.     ToScreen.Y = Pt.Y * Me.ScaleHeight / 4 * Size + Me.ScaleHeight / 2
  27. End Function
  28. Private Function Rot(Pt As Vec, Ang As Double) As Vec
  29.     Rot.X = Pt.X * Cos(Ang) - Pt.Y * Sin(Ang)
  30.     Rot.Y = Pt.X * Sin(Ang) + Pt.Y * Cos(Ang)
  31. End Function
  32. Private Sub UpdateRel()
  33.     Dim i As Long
  34.     For i = RelCount - 1 To 1 Step -1: Rel(i) = Rel(i - 1): Next
  35. End Sub
  36. Private Sub StartRel()
  37.     Dim i As Long
  38.     Rel(0) = ToScreen(Pt)
  39.     For i = 1 To RelCount - 1: Rel(i) = Rel(0): Next
  40. End Sub
  41. Private Sub cboType_Click()
  42.     Select Case cboType.ListIndex
  43.     Case 0: Pt.X = -1: Pt.Y = -1: Dir.X = Speed: Dir.Y = 0
  44.     Case 1: Pt.X = 0: Pt.Y = -1: Dir.X = Speed: Dir.Y = 0: Dir = Rot(Dir, -1.0471975511966)
  45.     Case 2: Pt.X = 0: Pt.Y = -1: Dir.X = 0: Dir.Y = 0
  46.     End Select
  47.     StartRel
  48.     Me.Cls
  49. End Sub
  50. Private Sub Form_Load()
  51.     Me.ScaleMode = vbPixels: Me.BackColor = 0: Me.DrawWidth = 3
  52.     ReDim Rel(RelCount - 1): Size = 1
  53.     Set cboType = Me.Controls.Add("VB.Combobox", "cboType")
  54.     cboType.AddItem "ГЉГўГ*äðГ*ГІ": cboType.AddItem "ÒðåóãîëüГ*ГЁГЄ": cboType.AddItem "Êðóã"
  55.     cboType.ListIndex = 1: cboType.Visible = True
  56.     Set tmrTimer = Me.Controls.Add("VB.Timer", "tmrTimer")
  57.     tmrTimer.Interval = 32: tmrTimer.Enabled = True
  58. End Sub
  59. Private Sub tmrTimer_Timer()
  60.     Dim i As Long
  61.     Static sz As Long
  62.     Size = (Sin(sz * 6.28318530717959E-03)) / 2 + 1
  63.     sz = (sz + 1) Mod 1000
  64.     Iteration
  65.     UpdateRel
  66.     Rel(0) = ToScreen(Pt)
  67.     For i = RelCount - 2 To 0 Step -1
  68.         Me.Line (Rel(i + 1).X, Rel(i + 1).Y)-(Rel(i).X, Rel(i).Y), 255 * (RelCount - i - 2) / RelCount
  69.     Next
  70. End Sub

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


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

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

11   голосов , оценка 4 из 5

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

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

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