Движение точки на PIcture - VB
Формулировка задачи:
День добрый.
Задача:
на Picture сгенерировать 10000 точек.
затем по траектории, выраженной функцией, провести новую точку. и в радиусе 20 точек от этой новой закрашивать ранее сгенерированные точки.
Код:
ScaleWidth=300
ScaleHeight=300
Но у меня возникло две проблемы:
1. Как закрасить предыдущую позицию точки?
2. Как удалить точки перед движением новой? т.е. удалять перед самым носом получается, но как сделать, что б на указанные 20 точек вперед тоже очищалось?
И еще вопросик: как сделать закрашенный круг? но это пока так, влом лезть в справку. на него можно и не отвечть
Решение задачи: «Движение точки на 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