VB.Net Tutorial/2D Graphics/3D

Материал из VB Эксперт
Версия от 15:55, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

3D Ball

<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 Draw3DBall

  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
   Friend WithEvents Button3 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.Button3 = 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(528, 312)
       Me.PictureBox1.TabIndex = 0
       Me.PictureBox1.TabStop = False
       "
       "Button1
       "
       Me.Button1.Location = New System.Drawing.Point(24, 336)
       Me.Button1.Name = "Button1"
       Me.Button1.Size = New System.Drawing.Size(64, 32)
       Me.Button1.TabIndex = 1
       Me.Button1.Text = "Shape 1"
       "
       "Button2
       "
       Me.Button2.Location = New System.Drawing.Point(120, 336)
       Me.Button2.Name = "Button2"
       Me.Button2.Size = New System.Drawing.Size(64, 32)
       Me.Button2.TabIndex = 2
       Me.Button2.Text = "3D Curve"
       "
       "Button3
       "
       Me.Button3.Location = New System.Drawing.Point(232, 336)
       Me.Button3.Name = "Button3"
       Me.Button3.Size = New System.Drawing.Size(72, 32)
       Me.Button3.TabIndex = 3
       Me.Button3.Text = "Ball"
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(528, 382)
       Me.Controls.Add(Me.Button3)
       Me.Controls.Add(Me.Button2)
       Me.Controls.Add(Me.Button1)
       Me.Controls.Add(Me.PictureBox1)
       Me.ResumeLayout(False)
   End Sub
   Dim g As System.Drawing.Graphics
   Dim pen1 As New System.Drawing.Pen(Color.Green, 0.5)
   Const PI = 3.14159
   Dim flag, col, r, h, hl, n, n1 As Short
   Dim x, y, z, cx, cy, cz, thx, thy, thz As Single
   Dim ed, od, eh As Short
   Dim point1, point2, point3, point4, point5 As System.Drawing.Point
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim th As Single
       Static ax(9), ay(9), az(9)
       Static bx(9), by(9), bz(9)
       h = 160 : thy = 0.2
       col = 0 : n1 = 1
       r = 100
       n = 8
       thx = 0.2
       PictureBox1.Refresh()
       ax(0) = h : ay(0) = h : az(0) = h
       n1 = 1
       For th = 0 To 2 * PI + 0.1 Step 2 * PI / n
           x = r * Math.Cos(th) : y = -h : z = r * Math.Sin(th)
           Call roty() : Call rotx()
           bx(n1) = x : by(n1) = y : bz(n1) = z
           n1 = n1 + 1
       Next th
       For n1 = 1 To n
           x = ax(n1) : y = ay(n1)
           Call linzuiti()
           x = ax(n1 + 1) : y = ay(n1 + 1)
           Call linzuiti()
           x = bx(n1 + 1) : y = by(n1 + 1)
           Call linzuiti()
           x = bx(n1) : y = by(n1)
           Call linzuiti()
       Next n1
   End Sub
   Public Sub linzuiti()
       Dim gx, gy As Single
       gx = 250 + x
       gy = 180 + y
       If flag = 0 Then point1.X = gx : point1.Y = gy
       flag = 1
       point2.X = gx : point2.Y = gy
       g = PictureBox1.CreateGraphics
       g.DrawLine(pen1, point1, point2)
       point1 = point2
   End Sub
   Private Sub rotx()
       Dim yw, zw As Single
       yw = y : zw = z
       y = yw * Math.Cos(thx) - zw * Math.Sin(thx)
       z = yw * Math.Sin(thx) + zw * Math.Cos(thx)
   End Sub
   Private Sub roty()
       Dim zw, xw As Single
       zw = z : xw = x
       x = zw * Math.Cos(thy) - xw * Math.Sin(thy)
       z = zw * Math.Sin(thy) + xw * Math.Cos(thy)
   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 x, y, s, cx, cy, zz, xx, yy As Single
       Dim h, a, b, sx, sx1, sx2, sy, sy1, sy2 As Integer
       Dim x1, x2, y1, y2, xw, yw As Integer
       s = pi / 16
       x1 = -3
       x2 = 3
       xw = x2 - x1
       y1 = -9 : y2 = 9 : yw = y2 - y1
       sx1 = 140 : sx2 = 600
       sy1 = 360 : sy2 = 100
       cx = (sx2 - sx1) / xw
       cy = (sy1 - sy2) / yw
       h = 170 : a = 6 : b = 6
       For y = y1 + 6 To y2 - 6 Step 1 / cy
           For x = x1 To x2 Step 1 / cx * 2
               zz = h * Math.Exp(-x * x / a * a - y * y / b * b)
               xx = x * cx + sx1 + 160
               yy = sy1 - y * cy
               sx = Int(xx + y * cy * Math.Cos(s))
               sy = yy - zz
               sy = sy - 100
               If x = -3 Then
                   point1.X = sx - 60 : point1.Y = sy - 20
               Else : point2.X = sx - 60 : point2.Y = sy - 20
                   g.DrawLine(pen1, point1, point2)
                   point1 = point2
               End If
           Next x
       Next y
   End Sub
   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       PictureBox1.Refresh()
       g = PictureBox1.CreateGraphics
       Dim i, r As Integer
       Dim x, y, z, s, q, p, px, py As Single
       Dim mx(600), my(600) As Integer
       s = pi / 4
       r = 100
       i = 1
       q = -pi / 2 + 0.1
       For p = 0 To 2 * pi Step 0.2
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           mx(i) = px + 200
           my(i) = 150 - py
           i = i + 1
       Next p
       point1.X = mx(1) : point1.Y = my(1)
       For q = -pi / 2 + 0.2 To pi / 2 Step 0.2
           i = 1
           For p = 0 To 2 * pi Step 0.2
               x = r * Math.Cos(q) * Math.Sin(p)
               y = r * Math.Sin(q)
               z = r * Math.Cos(q) * Math.Cos(p)
               px = x * 1.2
               py = y - z * Math.Sin(s)
               point2.X = px + 200 : point2.Y = 150 - py
               g.DrawLine(pen1, point1, point2)
               point1 = point2
               point3.X = mx(i) : point3.Y = my(i)
               point4.X = px + 200 : point4.Y = 150 - py
               g.DrawLine(pen1, point3, point4)
               point3 = point4
               mx(i) = px + 200
               my(i) = 150 - py
               i = i + 1
           Next p
           p = 0
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           point5.X = px + 200 : point5.Y = 150 - py
           g.DrawLine(pen1, point4, point5)
           point4 = point5
       Next q
   End Sub

End Class</source>

3D Curve

<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 Draw3DCurve

  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
   Friend WithEvents Button3 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.Button3 = 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(528, 312)
       Me.PictureBox1.TabIndex = 0
       Me.PictureBox1.TabStop = False
       "
       "Button1
       "
       Me.Button1.Location = New System.Drawing.Point(24, 336)
       Me.Button1.Name = "Button1"
       Me.Button1.Size = New System.Drawing.Size(64, 32)
       Me.Button1.TabIndex = 1
       Me.Button1.Text = "Shape 1"
       "
       "Button2
       "
       Me.Button2.Location = New System.Drawing.Point(120, 336)
       Me.Button2.Name = "Button2"
       Me.Button2.Size = New System.Drawing.Size(64, 32)
       Me.Button2.TabIndex = 2
       Me.Button2.Text = "3D Curve"
       "
       "Button3
       "
       Me.Button3.Location = New System.Drawing.Point(232, 336)
       Me.Button3.Name = "Button3"
       Me.Button3.Size = New System.Drawing.Size(72, 32)
       Me.Button3.TabIndex = 3
       Me.Button3.Text = "Ball"
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(528, 382)
       Me.Controls.Add(Me.Button3)
       Me.Controls.Add(Me.Button2)
       Me.Controls.Add(Me.Button1)
       Me.Controls.Add(Me.PictureBox1)
       Me.ResumeLayout(False)
   End Sub
   Dim g As System.Drawing.Graphics
   Dim pen1 As New System.Drawing.Pen(Color.Green, 0.5)
   Const PI = 3.14159
   Dim flag, col, r, h, hl, n, n1 As Short
   Dim x, y, z, cx, cy, cz, thx, thy, thz As Single
   Dim ed, od, eh As Short
   Dim point1, point2, point3, point4, point5 As System.Drawing.Point
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim th As Single
       Static ax(9), ay(9), az(9)
       Static bx(9), by(9), bz(9)
       h = 160 : thy = 0.2
       col = 0 : n1 = 1
       r = 100
       n = 8
       thx = 0.2
       PictureBox1.Refresh()
       ax(0) = h : ay(0) = h : az(0) = h
       n1 = 1
       For th = 0 To 2 * PI + 0.1 Step 2 * PI / n
           x = r * Math.Cos(th) : y = -h : z = r * Math.Sin(th)
           Call roty() : Call rotx()
           bx(n1) = x : by(n1) = y : bz(n1) = z
           n1 = n1 + 1
       Next th
       For n1 = 1 To n
           x = ax(n1) : y = ay(n1)
           Call linzuiti()
           x = ax(n1 + 1) : y = ay(n1 + 1)
           Call linzuiti()
           x = bx(n1 + 1) : y = by(n1 + 1)
           Call linzuiti()
           x = bx(n1) : y = by(n1)
           Call linzuiti()
       Next n1
   End Sub
   Public Sub linzuiti()
       Dim gx, gy As Single
       gx = 250 + x
       gy = 180 + y
       If flag = 0 Then point1.X = gx : point1.Y = gy
       flag = 1
       point2.X = gx : point2.Y = gy
       g = PictureBox1.CreateGraphics
       g.DrawLine(pen1, point1, point2)
       point1 = point2
   End Sub
   Private Sub rotx()
       Dim yw, zw As Single
       yw = y : zw = z
       y = yw * Math.Cos(thx) - zw * Math.Sin(thx)
       z = yw * Math.Sin(thx) + zw * Math.Cos(thx)
   End Sub
   Private Sub roty()
       Dim zw, xw As Single
       zw = z : xw = x
       x = zw * Math.Cos(thy) - xw * Math.Sin(thy)
       z = zw * Math.Sin(thy) + xw * Math.Cos(thy)
   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 x, y, s, cx, cy, zz, xx, yy As Single
       Dim h, a, b, sx, sx1, sx2, sy, sy1, sy2 As Integer
       Dim x1, x2, y1, y2, xw, yw As Integer
       s = pi / 16
       x1 = -3
       x2 = 3
       xw = x2 - x1
       y1 = -9 : y2 = 9 : yw = y2 - y1
       sx1 = 140 : sx2 = 600
       sy1 = 360 : sy2 = 100
       cx = (sx2 - sx1) / xw
       cy = (sy1 - sy2) / yw
       h = 170 : a = 6 : b = 6
       For y = y1 + 6 To y2 - 6 Step 1 / cy
           For x = x1 To x2 Step 1 / cx * 2
               zz = h * Math.Exp(-x * x / a * a - y * y / b * b)
               xx = x * cx + sx1 + 160
               yy = sy1 - y * cy
               sx = Int(xx + y * cy * Math.Cos(s))
               sy = yy - zz
               sy = sy - 100
               If x = -3 Then
                   point1.X = sx - 60 : point1.Y = sy - 20
               Else : point2.X = sx - 60 : point2.Y = sy - 20
                   g.DrawLine(pen1, point1, point2)
                   point1 = point2
               End If
           Next x
       Next y
   End Sub
   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       PictureBox1.Refresh()
       g = PictureBox1.CreateGraphics
       Dim i, r As Integer
       Dim x, y, z, s, q, p, px, py As Single
       Dim mx(600), my(600) As Integer
       s = pi / 4
       r = 100
       i = 1
       q = -pi / 2 + 0.1
       For p = 0 To 2 * pi Step 0.2
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           mx(i) = px + 200
           my(i) = 150 - py
           i = i + 1
       Next p
       point1.X = mx(1) : point1.Y = my(1)
       For q = -pi / 2 + 0.2 To pi / 2 Step 0.2
           i = 1
           For p = 0 To 2 * pi Step 0.2
               x = r * Math.Cos(q) * Math.Sin(p)
               y = r * Math.Sin(q)
               z = r * Math.Cos(q) * Math.Cos(p)
               px = x * 1.2
               py = y - z * Math.Sin(s)
               point2.X = px + 200 : point2.Y = 150 - py
               g.DrawLine(pen1, point1, point2)
               point1 = point2
               point3.X = mx(i) : point3.Y = my(i)
               point4.X = px + 200 : point4.Y = 150 - py
               g.DrawLine(pen1, point3, point4)
               point3 = point4
               mx(i) = px + 200
               my(i) = 150 - py
               i = i + 1
           Next p
           p = 0
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           point5.X = px + 200 : point5.Y = 150 - py
           g.DrawLine(pen1, point4, point5)
           point4 = point5
       Next q
   End Sub

End Class</source>

3D shape

<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 Draw3D

  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
   Friend WithEvents Button3 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.Button3 = 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(528, 312)
       Me.PictureBox1.TabIndex = 0
       Me.PictureBox1.TabStop = False
       "
       "Button1
       "
       Me.Button1.Location = New System.Drawing.Point(24, 336)
       Me.Button1.Name = "Button1"
       Me.Button1.Size = New System.Drawing.Size(64, 32)
       Me.Button1.TabIndex = 1
       Me.Button1.Text = "Shape 1"
       "
       "Button2
       "
       Me.Button2.Location = New System.Drawing.Point(120, 336)
       Me.Button2.Name = "Button2"
       Me.Button2.Size = New System.Drawing.Size(64, 32)
       Me.Button2.TabIndex = 2
       Me.Button2.Text = "3D Curve"
       "
       "Button3
       "
       Me.Button3.Location = New System.Drawing.Point(232, 336)
       Me.Button3.Name = "Button3"
       Me.Button3.Size = New System.Drawing.Size(72, 32)
       Me.Button3.TabIndex = 3
       Me.Button3.Text = "Ball"
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(528, 382)
       Me.Controls.Add(Me.Button3)
       Me.Controls.Add(Me.Button2)
       Me.Controls.Add(Me.Button1)
       Me.Controls.Add(Me.PictureBox1)
       Me.ResumeLayout(False)
   End Sub
   Dim g As System.Drawing.Graphics
   Dim pen1 As New System.Drawing.Pen(Color.Green, 0.5)
   Const PI = 3.14159
   Dim flag, col, r, h, hl, n, n1 As Short
   Dim x, y, z, cx, cy, cz, thx, thy, thz As Single
   Dim ed, od, eh As Short
   Dim point1, point2, point3, point4, point5 As System.Drawing.Point
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim th As Single
       Static ax(9), ay(9), az(9)
       Static bx(9), by(9), bz(9)
       h = 160 : thy = 0.2
       col = 0 : n1 = 1
       r = 100
       n = 8
       thx = 0.2
       PictureBox1.Refresh()
       ax(0) = h : ay(0) = h : az(0) = h
       n1 = 1
       For th = 0 To 2 * PI + 0.1 Step 2 * PI / n
           x = r * Math.Cos(th) : y = -h : z = r * Math.Sin(th)
           Call roty() : Call rotx()
           bx(n1) = x : by(n1) = y : bz(n1) = z
           n1 = n1 + 1
       Next th
       For n1 = 1 To n
           x = ax(n1) : y = ay(n1)
           Call linzuiti()
           x = ax(n1 + 1) : y = ay(n1 + 1)
           Call linzuiti()
           x = bx(n1 + 1) : y = by(n1 + 1)
           Call linzuiti()
           x = bx(n1) : y = by(n1)
           Call linzuiti()
       Next n1
   End Sub
   Public Sub linzuiti()
       Dim gx, gy As Single
       gx = 250 + x
       gy = 180 + y
       If flag = 0 Then point1.X = gx : point1.Y = gy
       flag = 1
       point2.X = gx : point2.Y = gy
       g = PictureBox1.CreateGraphics
       g.DrawLine(pen1, point1, point2)
       point1 = point2
   End Sub
   Private Sub rotx()
       Dim yw, zw As Single
       yw = y : zw = z
       y = yw * Math.Cos(thx) - zw * Math.Sin(thx)
       z = yw * Math.Sin(thx) + zw * Math.Cos(thx)
   End Sub
   Private Sub roty()
       Dim zw, xw As Single
       zw = z : xw = x
       x = zw * Math.Cos(thy) - xw * Math.Sin(thy)
       z = zw * Math.Sin(thy) + xw * Math.Cos(thy)
   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 x, y, s, cx, cy, zz, xx, yy As Single
       Dim h, a, b, sx, sx1, sx2, sy, sy1, sy2 As Integer
       Dim x1, x2, y1, y2, xw, yw As Integer
       s = pi / 16
       x1 = -3
       x2 = 3
       xw = x2 - x1
       y1 = -9 : y2 = 9 : yw = y2 - y1
       sx1 = 140 : sx2 = 600
       sy1 = 360 : sy2 = 100
       cx = (sx2 - sx1) / xw
       cy = (sy1 - sy2) / yw
       h = 170 : a = 6 : b = 6
       For y = y1 + 6 To y2 - 6 Step 1 / cy
           For x = x1 To x2 Step 1 / cx * 2
               zz = h * Math.Exp(-x * x / a * a - y * y / b * b)
               xx = x * cx + sx1 + 160
               yy = sy1 - y * cy
               sx = Int(xx + y * cy * Math.Cos(s))
               sy = yy - zz
               sy = sy - 100
               If x = -3 Then
                   point1.X = sx - 60 : point1.Y = sy - 20
               Else : point2.X = sx - 60 : point2.Y = sy - 20
                   g.DrawLine(pen1, point1, point2)
                   point1 = point2
               End If
           Next x
       Next y
   End Sub
   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       PictureBox1.Refresh()
       g = PictureBox1.CreateGraphics
       Dim i, r As Integer
       Dim x, y, z, s, q, p, px, py As Single
       Dim mx(600), my(600) As Integer
       s = pi / 4
       r = 100
       i = 1
       q = -pi / 2 + 0.1
       For p = 0 To 2 * pi Step 0.2
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           mx(i) = px + 200
           my(i) = 150 - py
           i = i + 1
       Next p
       point1.X = mx(1) : point1.Y = my(1)
       For q = -pi / 2 + 0.2 To pi / 2 Step 0.2
           i = 1
           For p = 0 To 2 * pi Step 0.2
               x = r * Math.Cos(q) * Math.Sin(p)
               y = r * Math.Sin(q)
               z = r * Math.Cos(q) * Math.Cos(p)
               px = x * 1.2
               py = y - z * Math.Sin(s)
               point2.X = px + 200 : point2.Y = 150 - py
               g.DrawLine(pen1, point1, point2)
               point1 = point2
               point3.X = mx(i) : point3.Y = my(i)
               point4.X = px + 200 : point4.Y = 150 - py
               g.DrawLine(pen1, point3, point4)
               point3 = point4
               mx(i) = px + 200
               my(i) = 150 - py
               i = i + 1
           Next p
           p = 0
           x = r * Math.Cos(q) * Math.Sin(p)
           y = r * Math.Sin(q)
           z = r * Math.Cos(q) * Math.Cos(p)
           px = x * 1.2
           py = y - z * Math.Sin(s)
           point5.X = px + 200 : point5.Y = 150 - py
           g.DrawLine(pen1, point4, point5)
           point4 = point5
       Next q
   End Sub

End Class</source>