На форме только таймер (Timer1), код формы (Form1):
- Код: Выделить всё
Dim tmrCount As Integer
Private Sub Form_Load()
Mod1.DrawStar Form1, 0
End Sub
Private Sub Timer1_Timer()
tmrCount = tmrCount + 1
If tmrCount = 360 Then
tmrCount = 0
End If
Mod1.DrawStar Form1, tmrCount
End Sub
Ещё модуль (Mod1):
- Код: Выделить всё
Type CoordVozvrat
x As Single
y As Single
End Type
Sub DrawStar(pic As Form, Angle As Integer)
Dim Psets(16, 4) As Single
pic.Cls
For T = 1 To 5 Step 0.08
Psets(1, 1) = (((T - 0.2) / 0.08) + 60) * 15 + 120
Psets(2, 1) = ((((1 / T) - 0.2) / 0.08) + 60) * 15 + 120
Psets(3, 1) = (((T - 0.2) / 0.08) + 60) * 15 + 120
Psets(4, 1) = ((((1 / T) - 0.2) / 0.08) + 60) * 15 + 120
Psets(5, 1) = (60 - (((1 / T) - 0.2) / 0.08)) * 15 + 120
Psets(6, 1) = (60 - ((T - 0.2) / 0.08)) * 15 + 120
Psets(7, 1) = (60 - ((T - 0.2) / 0.08)) * 15 + 120
Psets(8, 1) = (60 - (((1 / T) - 0.2) / 0.08)) * 15 + 120
Psets(9, 1) = (Cos(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) + 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(10, 1) = (Cos(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) + 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(11, 1) = (Cos(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) + 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(12, 1) = (Cos(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) + 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(13, 1) = (60 - Cos(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) - 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(14, 1) = (60 - Cos(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) - 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(15, 1) = (Cos(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) - 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(16, 1) = (Cos(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) - 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(1, 2) = (60 - (((1 / T) - 0.2) / 0.08)) * 15 + 120
Psets(2, 2) = (60 - ((T - 0.2) / 0.08)) * 15 + 120
Psets(3, 2) = ((((1 / T) - 0.2) / 0.08) + 60) * 15 + 120
Psets(4, 2) = (((T - 0.2) / 0.08) + 60) * 15 + 120
Psets(5, 2) = (60 - ((T - 0.2) / 0.08)) * 15 + 120
Psets(6, 2) = (60 - (((1 / T) - 0.2) / 0.08)) * 15 + 120
Psets(7, 2) = ((((1 / T) - 0.2) / 0.08) + 60) * 15 + 120
Psets(8, 2) = (((T - 0.2) / 0.08) + 60) * 15 + 120
Psets(9, 2) = (60 - Sin(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) + 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(10, 2) = (60 - Sin(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) + 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(11, 2) = (Sin(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) + 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(12, 2) = (Sin(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) + 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(13, 2) = (60 - Sin(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) - 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(14, 2) = (60 - Sin(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) - 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2)) * 15 + 120
Psets(15, 2) = (Sin(Atn((((1 / T) - 0.2) / 0.08) / ((T - 0.2) / 0.08)) - 0.785398163397448) * Sqr(((T - 0.2) / 0.08) ^ 2 + (((1 / T) - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
Psets(16, 2) = (Sin(Atn(((T - 0.2) / 0.08) / (((1 / T) - 0.2) / 0.08)) - 0.785398163397448) * Sqr((((1 / T) - 0.2) / 0.08) ^ 2 + ((T - 0.2) / 0.08) ^ 2) + 60) * 15 + 120
For i = 1 To 16
If Angle <> 0 Then
Psets(i, 1) = Povernuti(1020, 1020, Psets(i, 1), Psets(i, 2), Angle / 57.2957795130823).x
Psets(i, 2) = Povernuti(1020, 1020, Psets(i, 1), Psets(i, 2), Angle / 57.2957795130823).y
End If
pic.PSet (Psets(i, 1), Psets(i, 2)), vbRed
Next i
Next T
DoEvents
End Sub
Function Povernuti(DotInX As Single, DotInY As Single, DotOutX As Single, DotOutY As Single, Ugol As Single) As CoordVozvrat
Dim x0 As Single, y0 As Single, x As Single, y As Single, x1 As Single, y1 As Single
x0 = DotInX
y0 = DotInY
x = DotOutX
y = DotOutY
x1 = x0 + ((x - x0) * Cos(Ugol)) - ((y - y0) * Sin(Ugol))
y1 = y0 + ((x - x0) * Sin(Ugol)) + ((y - y0) * Cos(Ugol))
Povernuti.x = x1
Povernuti.y = y1
End Function
Но дело всё в том, что мне нужно, чтоб она крутилась по-обычному, по часовой стрелке, относительно своего центра симметрии, без изменения формы, а не так, как она - в трёхмерном пространстве... Что-то не то в процедуре поворота точки относительно другой точки (Povernuti), хотя формулу, которая в ней используется можно легко вывести, зная математику. Процедура не переводит экранные координаты точки в школьные декартовские, но если их перевести, получится ещё хуже... Что только я вней не изменял, по-всякому делал - ничего не получается...