VB.Net Tutorial/2D Graphics/Hexagon

Материал из VB Эксперт
Перейти к: навигация, поиск

Draw Hexagon

<source lang="vbnet">"Visual Basic.Net JingCai Programming 100 Examples "Author: Yong Zhang "Publisher: Water Publisher China "ISBN: 750841156

Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class DrawHexagon

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class

Public Class Form1

   Inherits System.Windows.Forms.Form
   Public Sub New()
       MyBase.New()
       InitializeComponent()
   End Sub
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing Then
           If Not (components Is Nothing) Then
               components.Dispose()
           End If
       End If
       MyBase.Dispose(disposing)
   End Sub
   Private components As System.ruponentModel.IContainer
   Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
   Friend WithEvents Button1 As System.Windows.Forms.Button
   Friend WithEvents Button2 As System.Windows.Forms.Button
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
       Me.PictureBox1 = New System.Windows.Forms.PictureBox
       Me.Button1 = New System.Windows.Forms.Button
       Me.Button2 = New System.Windows.Forms.Button
       Me.SuspendLayout()
       "
       "PictureBox1
       "
       Me.PictureBox1.BackColor = System.Drawing.SystemColors.Window
       Me.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
       Me.PictureBox1.Dock = System.Windows.Forms.DockStyle.Top
       Me.PictureBox1.Location = New System.Drawing.Point(0, 0)
       Me.PictureBox1.Name = "PictureBox1"
       Me.PictureBox1.Size = New System.Drawing.Size(504, 304)
       Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
       Me.PictureBox1.TabIndex = 0
       Me.PictureBox1.TabStop = False
       "
       "Button1
       "
       Me.Button1.Location = New System.Drawing.Point(160, 320)
       Me.Button1.Name = "Button1"
       Me.Button1.Size = New System.Drawing.Size(80, 32)
       Me.Button1.TabIndex = 1
       Me.Button1.Text = "Hexagon"
       "
       "Button2
       "
       Me.Button2.Location = New System.Drawing.Point(296, 320)
       Me.Button2.Name = "Button2"
       Me.Button2.Size = New System.Drawing.Size(80, 32)
       Me.Button2.TabIndex = 2
       Me.Button2.Text = "Circle"
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(504, 366)
       Me.Controls.Add(Me.Button2)
       Me.Controls.Add(Me.Button1)
       Me.Controls.Add(Me.PictureBox1)
       Me.ResumeLayout(False)
   End Sub
   Dim pen1 As New System.Drawing.Pen(Color.Green, 0.4)
   Dim g As System.Drawing.Graphics
   Const Max = 20
   Const pi = 3.1415926
   Dim dx(Max), dy(Max) As Double
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       g = PictureBox1.CreateGraphics
       PictureBox1.Refresh()
       Dim i As Integer
       Dim s, r As Double
       i = 6
       s = 80
       r = 0.34
       setdate(6)
       snow(200.0#, 180.0#, 6, i, s, r)
   End Sub
   Private Sub Sixth(ByVal x, ByVal y, ByVal n, ByVal s)
       Dim i, j, x1, x2, y1, y2 As Integer
       For i = 0 To n
           If i = n Then
               j = 1
           Else
               j = i + 1
           End If
           x1 = Int(x + dx(i) * s) - 50
           y1 = Int(y + dy(i) * s) - 55
           x2 = Int(x + dx(j) * s) - 50
           y2 = Int(y + dy(j) * s) - 55
           g.DrawLine(pen1, x1, y1, x2, y2)
       Next
   End Sub
   Private Sub snow(ByVal x, ByVal y, ByVal n, ByVal i, ByVal s, ByVal r)
       Dim t, t1 As Integer
       Dim xx, yy, s1 As Double
       If i > 0 Then
           For t = 0 To n
               xx = x + dx(t) * s
               yy = y + dy(t) * s
               t1 = i - 1
               s1 = s * r
               snow(xx, yy, n, t1, s1, r)
           Next
       End If
       Sixth(x, y, n, s)
   End Sub
   Private Sub setdate(ByVal n)
       Dim i As Integer
       Dim theta As Double
       dx(i) = 0.0#
       dy(i) = 0.0#
       theta = 2.0# * pi / n
       For i = 1 To n
           dx(i) = Math.Sin(i * theta)
           dy(i) = Math.Cos(i * theta)
       Next
   End Sub
   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       PictureBox1.Refresh()
       g = PictureBox1.CreateGraphics
       Dim n, i As Integer
       Dim r, r1, c As Single
       Dim p As Double = 0.8
       Dim f As Double = 0.2
       c = 40.0#
       n = 6
       r1 = 0.5 * 1000 * (1 - f) / (1 - p)
       r = r1 / c
       g.DrawEllipse(pen1, 200 - r, 150 - r, 2 * r, 2 * r)
       circle(200, 150, r, n + 1)
   End Sub
   Private Sub circle(ByVal x, ByVal y, ByVal r, ByVal n)
       Dim tcos(100), tsin(100) As Single
       Dim i, ns As Integer
       Dim theta As Double
       Dim f As Single = 0.3!
       Dim c As Double = 2
       ns = 10
       theta = 2 * pi / ns
       Dim n1, f1 As Single
       n1 = n - 1
       f1 = f * r
       If n1 > 1 Then
           For i = 1 To ns
               tcos(i) = c * Math.Cos(i * theta)
               tsin(i) = c * Math.Sin(i * theta)
               g.DrawEllipse(pen1, x + r * tcos(i) - f1, y + r * tsin(i) - f1, 2 * f1, 2 * f1)
               circle(x + r * tcos(i), y + r * tsin(i), f1, n1)
           Next
       End If
   End Sub

End Class</source>