Interactive physics simulation with Visual Basic and VB.NET examples
Projectile motion is a fundamental concept in physics that describes the motion of an object thrown or projected into the air, subject to only the acceleration of gravity. This simulation demonstrates the parabolic path that projectiles follow, determined by the launching angle and initial speed.
The equations governing projectile motion are:
y = (v × sin(a)) × t - ½ × g × t²
x = (v × cos(a)) × t
Where v = launching speed, a = launching angle, g = gravity (9.8 m/s²), t = time
Below you'll find an interactive simulation, Visual Basic code examples for both VB6 and VB.NET, and practical exercises to deepen your understanding of physics programming.
Adjust the parameters below to see how they affect the projectile's trajectory:
Maximum Height: 0 m | Range: 0 m | Flight Time: 0 s
Private Sub cmd_Draw_Click()
Dim x As Single, y As Single
Dim v As Single, t As Single, a As Single
Dim g As Single
' Get input values
v = Val(Txt_Speed.Text)
a = Val(Txt_Angle.Text)
g = 9.8 ' Acceleration due to gravity
' Clear previous drawing
Pic_Curve.Cls
t = 0
' Draw the ground
Pic_Curve.Line (0, 120)-(Pic_Curve.Width, 120), vbGreen
' Calculate and plot trajectory
Do
t = t + 0.01
y = v * Sin(a * 3.141592654 / 180) * t - 0.5 * g * (t ^ 2)
x = v * Cos(a * 3.141592654 / 180) * t
' Plot point (adjusting for coordinate system)
Pic_Curve.PSet (x, 120 - y), vbRed
' Exit loop when projectile hits ground
If y < 0 Or x > Pic_Curve.Width Then
Exit Do
End If
Loop
' Display results
lblMaxHeight.Caption = "Max Height: " & Format(CalculateMaxHeight(v, a, g), "0.00") & " m"
lblRange.Caption = "Range: " & Format(x, "0.00") & " m"
lblFlightTime.Caption = "Flight Time: " & Format(t, "0.00") & " s"
End Sub
Private Function CalculateMaxHeight(v As Single, a As Single, g As Single) As Single
' Max height = (v² * sin²(a)) / (2 * g)
CalculateMaxHeight = (v ^ 2) * (Sin(a * 3.141592654 / 180) ^ 2) / (2 * g)
End Function
Private Sub BtnSimulate_Click(sender As Object, e As EventArgs) Handles BtnSimulate.Click
Dim v As Double = Double.Parse(TxtSpeed.Text)
Dim a As Double = Double.Parse(TxtAngle.Text)
Dim g As Double = 9.8
Dim t As Double = 0
Dim x, y As Double
' Clear previous drawing
PicCanvas.Image = Nothing
Using gfx As Graphics = Graphics.FromImage(PicCanvas.Image)
' Set up drawing surface
gfx.SmoothingMode = SmoothingMode.AntiAlias
gfx.Clear(Color.White)
' Draw ground
gfx.DrawLine(Pens.Green, 0, PicCanvas.Height - 30, PicCanvas.Width, PicCanvas.Height - 30)
' Create pen for trajectory
Using trajectoryPen As New Pen(Color.Blue, 2)
Dim points As New List(Of PointF)
' Calculate trajectory points
Do
t += 0.01
y = v * Math.Sin(a * Math.PI / 180) * t - 0.5 * g * Math.Pow(t, 2)
x = v * Math.Cos(a * Math.PI / 180) * t
' Convert to canvas coordinates
Dim canvasX As Single = x * 10 ' Scale for visualization
Dim canvasY As Single = PicCanvas.Height - 30 - (y * 10) ' Flip y-axis
points.Add(New PointF(canvasX, canvasY))
' Exit when projectile hits ground
If y < 0 Or canvasX > PicCanvas.Width Then Exit Do
Loop
' Draw the trajectory
If points.Count > 1 Then
gfx.DrawCurve(trajectoryPen, points.ToArray())
End If
' Draw launch point
gfx.FillEllipse(Brushes.Red, 0, PicCanvas.Height - 30, 8, 8)
End Using
End Using
' Display results
LblMaxHeight.Text = $"Max Height: {CalculateMaxHeight(v, a, g):F2} m"
LblRange.Text = $"Range: {x:F2} m"
LblFlightTime.Text = $"Flight Time: {t:F2} s"
' Refresh canvas
PicCanvas.Invalidate()
End Sub
Private Function CalculateMaxHeight(v As Double, a As Double, g As Double) As Double
Return (Math.Pow(v, 2) * Math.Pow(Math.Sin(a * Math.PI / 180), 2) / (2 * g)
End Function
The projectile simulation uses fundamental physics equations to calculate the path of an object launched at an angle:
x = v × cos(θ) × t
y = v × sin(θ) × t - ½ × g × t²
Where:
The implementation involves:
The VB.NET version improves upon VB6 by:
Test your understanding with these programming exercises:
Modify the simulation to account for air resistance. Add a drag coefficient input and adjust the equations to include drag force:
Enhance the program to simulate multiple projectiles simultaneously:
Create a game where players try to hit targets with projectiles: