# Understanding Projectile Motion: A Mathematical and Computational Perspective

In the realm of physics, projectile motion describes the motion of an object projected into the air, moving under the influence of gravity. This fundamental concept finds application in various fields, from physics and engineering to sports and ballistics. In this blog post, we will delve into the logic and mathematics behind projectile motion, exploring how we can simulate and visualize it using Python.

## The Basics of Projectile Motion

Projectile motion can be broken down into two independent components: horizontal motion and vertical motion. The horizontal motion is characterized by a constant velocity, as there is no horizontal acceleration (neglecting air resistance). On the other hand, the vertical motion is influenced by gravity, causing the object to accelerate downward at a rate of 9.81 m/s² (assuming Earth's gravity).

## The Mathematical Formulation

To mathematically describe projectile motion, we can use the following equations:

Horizontal Motion:

`x(t) = v_{x}.t`

where x(t) is the horizontal position of the object at time t, and `v_{x}` is the horizontal component of the initial velocity.

Vertical Motion:

`y(t) = v(y).t - \frac{1}{2}.g.t ^{2}`

where y(t) is the vertical position of the object at time t and `v_{y}` is the vertical component of the initial velocity, and g is the acceleration due to gravity.

## Simulating Projectile Motion in Python

Now, let's simulate projectile motion using Python. We will define a function that calculates the trajectory of a projectile given its initial velocity and launch angle. We will then use matplotlib to visualize the trajectory.

Code Link :

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

from ipywidgets import interact, widgets

def projectile_motion(v, angle):

# Constants

g = 9.81 # Acceleration due to gravity (m/s^2)

dt = 0.01 # Time step (s)

# Initial conditions

vx = v * np.cos(np.radians(angle)) # Initial x velocity

vy = v * np.sin(np.radians(angle)) # Initial y velocity

x = 0 # Initial x position

y = 0 # Initial y position

# Arrays to store the trajectory

x_data = [x]

y_data = [y]

# Simulation loop

while y >= 0:

# Update x and y positions

x += vx * dt

y += vy * dt - 0.5 * g * dt**2

# Update y velocity

vy -= g * dt

# Store the new position

x_data.append(x)

y_data.append(y)

return x_data, y_data

@interact(v=widgets.FloatSlider(min=0, max=100, step=1, value=10, description='Velocity (m/s):'),

angle=widgets.FloatSlider(min=0, max=90, step=1, value=45, description='Angle (degrees):'))

def update(v, angle):

# Calculate projectile motion

x_data, y_data = projectile_motion(v, angle)

# Plot the trajectory

plt.figure(figsize=(10, 6))

num_points = 1000 # Limit the number of points plotted in each frame

step = max(len(x_data) // num_points, 1) # Ensure step is at least 1

plt.plot(x_data[::step], y_data[::step])

plt.title('Projectile Motion')

plt.xlabel('Distance (m)')

plt.ylabel('Height (m)')

plt.axis('equal')

plt.grid(True)

plt.show()

## 0 Comments

if you are not getting it then ask i am glad to help