Public Function getHeartPoint(ByVal s As Single) As PointF() '生成点的集合,s表示缩放系数
Dim t As Single = 0.0F
Dim k As Integer = Int(Rnd() * 4 + 2)
Dim ps(360 / k) As PointF
For l As Integer = 0 To 360 Step k
t = l * Math.PI / 180.0F
Dim x As Single = (s - Rnd()) * 16 * (Math.Sin(t)) ^ 3
Dim y As Single = (s - Rnd()) * (13 * Math.Cos(t) - 5 * Math.Cos(2 * t) - 2 * Math.Cos(3 * t) - Math.Cos(4 * t))
ps(l / k) = New PointF(x, y)
Next
Return ps
End Function
Private Function drawHeart() As Bitmap '生成心形图案,每点为4*4方块
Dim B As New Bitmap(Me.Width, Me.Height)
Dim G As Graphics = Graphics.FromImage(B)
G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
' G.Clear(Color.Black)
Dim bs As Single = Me.Width / 32
For n As Integer = 0 To 9
Dim p() As PointF = getHeartPoint(bs - Rnd() * 2)
For i As Integer = 0 To p.Length - 1
p(i) = New PointF(p(i).X + Me.Width / 2, -p(i).Y + Me.Height * 0.42)
Next
' G.DrawCurve(Pens.Red, p)
For i As Integer = 0 To p.Length - 1
G.FillRectangle(Brushes.Red, New Rectangle(p(i).X, p(i).Y, 4, 4))
Next
Next
Return B
G.Dispose()
End Function
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Me.BackgroundImage = drawHeart()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Width = 300
Me.Height = 300
'Timer1.Enabled = True
Timer2.Enabled = True
End Sub
实现方法:
新建windows窗体程序,添加个Timer控件,设置interval为150
效果:
见上图,心形轮廓不断改变。窗体长宽比为1时显示完整心形,,,,