abidlabs's picture
abidlabs HF staff
Update app.py
97f1ec3
import gradio as gr
import numpy as np
import pandas as pd
def plot(v, a):
g = 9.81
theta = a / 180 * 3.14
tmax = ((2 * v) * np.sin(theta)) / g
timemat = tmax * np.linspace(0, 1, 40)[:, None]
x = (v * timemat) * np.cos(theta)
y = ((v * timemat) * np.sin(theta)) - ((0.5 * g) * (timemat**2))
trajectory = pd.DataFrame({'x': x.flatten(), 'y': y.flatten()})
return trajectory
with gr.Blocks() as demo:
gr.Markdown(r"""
# Range of a Projectile
The range of a projectile is the horizontal distance it travels during its motion. You can see how the range changes as you adjust the initial speed and angle of the projectile:
""")
with gr.Row():
speed = gr.Slider(1, 30, 25, label="Speed")
angle = gr.Slider(0, 90, 45, label="Angle")
output = gr.ScatterPlot(None, 'x', 'y')
speed.change(plot, [speed, angle], output)
angle.change(plot, [speed, angle], output)
demo.load(plot, [speed, angle], output)
gr.Markdown(r"""
The horizontal displacement of a projectile at any time can be calculated using the following kinematic equation:
$x = x_0 + v_0 \cos \theta \cdot t$
where $x$ is the horizontal displacement, $x_0$ is the initial horizontal position, $v_0$ is the initial velocity, $\theta$ is the angle at which the projectile is launched, and $t$ is the time.
To find the range of the projectile, we need to find the time at which it hits the ground (i.e., when its vertical displacement becomes zero). The vertical displacement of a projectile at any time can be calculated using the following kinematic equation:
$y = y_0 + v_0 \sin \theta \cdot t - \frac{1}{2}gt^2$
where $y$ is the vertical displacement, $y_0$ is the initial vertical position, $v_0$ is the initial velocity, $\theta$ is the angle at which the projectile is launched, $t$ is the time, $g$ is the acceleration due to gravity, and $t$ is the time.
To find the time at which the projectile hits the ground, we can set the vertical displacement to zero and solve for $t$. This gives us the following equation:
$0 = y_0 + v_0 \sin \theta \cdot t - \frac{1}{2}gt^2$
Solving for $t$, we get two possible solutions, but since the projectile will hit the ground at a later time, we need to take the positive value of $t$. Substituting this value into the equation for horizontal displacement and using a trigonometric identity, we get the following equation for the range of the projectile:
$R = v_0^2 \cdot \frac{\sin(2\theta)}{g}$
""")
demo.launch()