vb.net画心形图

 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时显示完整心形,,,,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值