import matplotlib.pyplot as plt import numpy as np import math import matplotlib.gridspec as gridspec from matplotlib.animation import FuncAnimation fig = plt.figure() plt.xlabel('X') plt.ylabel('Y') # limiting the y and x axis plt.ylim(0, 10) plt.xlim(0, 10) def xy_plot1(u, theta): y_arr1= [] x_arr1 = [] # displacement in the y_direction is zero x_disp = (u*u)*(math.sin(2*theta))/9.8 # disp_x = (u^2)*sin(2theta)/g {horizontal range} x = 0 # distance from the origin while(x <= x_disp): # below is the equation of path of projectile y = (x*(math.tan(theta))) - ((9.8*x*x)/(2*pow((u*math.cos(theta)), 2))) y_arr1.append(y) x_arr1.append(x) x = x + 0.1 # basically x = x + dx plt.plot(x_arr1, y_arr1) def xy_plot2(u, theta): y_arr2 = [] x_arr2 = [] # displacement in the y_direction is zero x_disp = (u*u)*(math.sin(2*theta))/9.8 # disp_x = (u^2)*sin(2theta)/g {horizontal range} x = 0 # distance from the origin dx = 0.1 while(x <= x_disp): # below is the equation of path of projectile y = (x*(math.tan(theta))) - ((9.8*x*x)/(2*pow((u*math.cos(theta)), 2))) y_arr2.append(y) x_arr2.append(x) x = x + dx plt.plot(x_arr2, y_arr2) xy_plot1(10, 60) xy_plot2(10, 30) plt.show()
Advertisement
Answer
Be careful! Your theta argument for the xyplot() function is in degrees, but inside your function, the math.sin() function takes the argument for the angle in units of radians. The easiest fix is to provide your theta argument in units of radians instead of degrees.
You also don’t need both functions if they do the exact same thing, as plt.plot() will draw subsequent projectile curves along with previous ones as long as you don’t clear the plot.
import matplotlib.pyplot as plt import numpy as np import math import matplotlib.gridspec as gridspec from matplotlib.animation import FuncAnimation fig = plt.figure() plt.xlabel('X') plt.ylabel('Y') # limiting the y and x axis plt.ylim(0, 10) plt.xlim(0, 10) def xy_plot(u, theta): y_arr2 = [] x_arr2 = [] # displacement in the y_direction is zero x_disp = (u*u)*(math.sin(2*theta))/9.8 # disp_x = (u^2)*sin(2theta)/g {horizontal range} x = 0 # distance from the origin dx=0.1 while(x <= x_disp): # below is the equation of path of projectile y = (x*(math.tan(theta))) - ((9.8*x*x)/(2*pow((u*math.cos(theta)), 2))) y_arr2.append(y) x_arr2.append(x) x = x + dx plt.plot(x_arr2, y_arr2) # be careful about using degrees versus radians!! xy_plot(10, math.pi/3) xy_plot(10, math.pi/6) plt.show()