Движение точки на PIcture - VB
Формулировка задачи:
День добрый.
Задача:
на Picture сгенерировать 10000 точек.
затем по траектории, выраженной функцией, провести новую точку. и в радиусе 20 точек от этой новой закрашивать ранее сгенерированные точки.
Код:
ScaleWidth=300
ScaleHeight=300
Но у меня возникло две проблемы:
1. Как закрасить предыдущую позицию точки?
2. Как удалить точки перед движением новой? т.е. удалять перед самым носом получается, но как сделать, что б на указанные 20 точек вперед тоже очищалось?
И еще вопросик: как сделать закрашенный круг? но это пока так, влом лезть в справку. на него можно и не отвечть
Листинг программы
- Dim x(1 To 10000) As Integer, y(1 To 10000) As Integer
- Dim i As Long, j As Long
- Private Sub Command1_Click()
- For i = 1 To 10000
- x(i) = Rnd * Picture1.ScaleWidth
- y(i) = Rnd * Picture1.ScaleHeight
- Picture1.PSet (x(i), y(i)), vbWhite
- Next i
- i = 0
- Timer1.Enabled = True
- End Sub
- Private Sub Timer1_Timer()
- Dim polet(0 To 10000) As Single
- If i <= Picture1.ScaleWidth Then
- polet(i) = 2 * Sin(i / 2) + (1 / 2) * Cos(2 * i)
- Picture1.Circle (i, polet(i) + 150), 1, vbWhite
- If i > 1 Then Picture1.Circle (i - 1, polet(i - 1)), 1, vbBlack
- For j = 0 To 20
- Picture1.PSet (i, polet(i) + 150), vbBlack
- Picture1.PSet (i, polet(i) + j + 150), vbBlack
- Picture1.PSet (i, polet(i) - j + 150), vbBlack
- Next j
- i = i + 1
- Else
- Timer1.Enabled = False
- End If
- End Sub
Решение задачи: «Движение точки на PIcture»
textual
Листинг программы
- Dim x(1 To 10000) As Integer, y(1 To 10000) As Integer
- Dim i As Long, j As Long
- Dim polet(0 To 10000) As Single
- Private Sub Command1_Click()
- Picture1.AutoRedraw = True
- For i = 1 To 10000
- x(i) = Rnd * Picture1.ScaleWidth
- y(i) = Rnd * Picture1.ScaleHeight
- Picture1.PSet (x(i), y(i)), vbWhite
- Next i
- i = 0
- Timer1.Enabled = True
- End Sub
- Private Sub Form_Load()
- Dim buf As PictureBox
- Set buf = Me.Controls.Add("VB.PictureBox", "img")
- buf.AutoRedraw = True
- buf.ScaleMode = vbPixels
- buf.BorderStyle = 0
- buf.Move 0, 0, ScaleX(40, vbPixels, ScaleMode), ScaleX(40, vbPixels, ScaleMode)
- End Sub
- Private Sub Timer1_Timer()
- Static ox As Single, oy As Single
- Dim x As Single, y As Single, dx As Single, _
- dy As Single, px As Single, py As Single, _
- sx As Single, sy As Single, buf As PictureBox
- sx = Picture1.ScaleX(1, vbPixels, vbUser)
- sy = Picture1.ScaleY(1, vbPixels, vbUser)
- Set buf = Me.Controls("img")
- If i <= Picture1.ScaleWidth Then
- x = i
- y = 20 * Sin(i / 2) + 0.5 * Cos(2 * i) + 150
- px = Picture1.ScaleX(x, vbUser, vbPixels): py = Picture1.ScaleY(y, vbUser, vbPixels)
- If i Then Picture1.PaintPicture buf.Image, ox - sx * 20, oy - sy * 20, sx * 40, sy * 40, 0, 0, sx * 40, sy * 40
- buf.PaintPicture Picture1.Image, 0, 0, 40, 40, px - 20, py - 20, 40, 40
- Picture1.FillStyle = vbSolid
- Picture1.Circle (x, y), sx * 18, vbBlack
- Picture1.FillStyle = vbTransparent
- Picture1.Circle (x, y), 2, vbWhite
- oy = y: ox = x
- i = i + 1
- Else
- Timer1.Enabled = False
- Form1.Caption = "Óñ¸"
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д