import matplotlib.pyplot as plt
from numpy import linspace, full_like, array, arange
from mpmath import degrees, radians
from sympy import *
from sympy import N as Num
pie = 2*pi
m = Symbol("m", positive=True)
s = Symbol("s", positive=True)
kg = Symbol("kg", positive=True)
print("\n--- User input -----------------------")
symbolic = True
symbolic = False
if symbolic:
alpha= var("alpha")
g = var("g")
h, xP = var("h, x_P")
else:
alpha = pie/12
g = 10 *m/s/s
h = 1 *m
xP = 3 *m
print("\n--- a: -------------------------------")
sa = sin(alpha)
ca = cos(alpha)
ta = tan(alpha)
ss = sa*sa
cc = ca*ca
s2a = sin(2*alpha)
[pprint(latex(x)) for x in [sa,ss,ca,cc,ta,s2a]]
x = var("x")
v0 = var("v0", positive=True)
z1 = -g/2/v0/v0/cc *x*x + ta*x
pprint(latex(z1))
print("\n--- b: -------------------------------")
rhs = z1.subs(x, 3*m)
eq = Eq(-h, rhs)
sol = solve(eq,v0)
vs1 = sol[0]
pprint("\nv0^2:")
pprint(latex(vs1*vs1))
pprint("\nv0:")
pprint(Num(vs1, 3))
print("\n--- c: -------------------------------")
half = S(1)/2
xM = half/g * vs1*vs1 * s2a
zM = half/g * vs1*vs1 * ss
pprint(Num(xM,3))
pprint(Num(zM,3))
print("\n--- d: -------------------------------")
twobeta = atan(xP/h)
pprint(Num(twobeta*180./pi,3))
beta = half*twobeta
pprint(Num(beta*180./pi,3))
cb = cos(beta)
tb = tan(beta)
z2 = -g/2/v0/v0/cb/cb *x*x + tb*x
rhs = z2.subs(x, 3*m)
eq = Eq(-h, rhs)
sol = solve(eq,v0)
vs2 = sol[0]
pprint("\nv:")
pprint(Num(vs2, 3))
print("\n--- e: -------------------------------")
pprint(Num(vs1,3))
pprint(Num(vs2,3))
z_in_m_1 = z1.subs({v0:vs1})/m
z_in_m_2 = z2.subs({v0:vs2})/m
xi = var("xi")
z1 = z_in_m_1.subs(x,xi*m).simplify()
z2 = z_in_m_2.subs(x,xi*m).simplify()
xia = linspace(float(0), float(3))
def fill_array(f,x,xia):
if f.is_constant(x):
res = full_like(xia,f)
else:
res = lambdify(x,f,"numpy")
res = array(res(xia))
return res
[z1a, z2a] = [fill_array(z,xi,xia) for z in [z1,z2]]
tmp = plt.axis('equal')
tmp = plt.grid()
tmp = plt.plot(xia,z1a, "b-", label=r"$\alpha$")
tmp = plt.plot(xia,z2a, "r--", label=r"$\beta$")
tmp = plt.xlabel(r"$x / \mathrm{m}$")
tmp = plt.ylabel(r"$z \,/\, \mathrm{m}$")
tmp = plt.legend()
plt.show()
--- User input -----------------------
--- a: -------------------------------
\frac{1}{2}
\frac{1}{4}
\frac{\sqrt{3}}{2}
\frac{3}{4}
\frac{\sqrt{3}}{3}
\frac{\sqrt{3}}{2}
[None, None, None, None, None, None]
- \frac{20 m x^{2}}{3 s^{2} v_{0}^{2}} + \frac{\sqrt{3} x}{3}
--- b: -------------------------------
v0^2:
\frac{60 m^{2}}{s^{2} \left(1 + \sqrt{3}\right)}
v0:
4.69*m
------
s
--- c: -------------------------------
0.951*m
0.275*m
--- d: -------------------------------
71.6
35.8
v:
4.65*m
------
s
--- e: -------------------------------
4.69*m
------
s
4.65*m
------
s
--- User input -----------------------
--- a: -------------------------------
\frac{1}{2}
\frac{1}{4}
\frac{\sqrt{3}}{2}
\frac{3}{4}
\frac{\sqrt{3}}{3}
\frac{\sqrt{3}}{2}
[None, None, None, None, None, None]
- \frac{20 m x^{2}}{3 s^{2} v_{0}^{2}} + \frac{\sqrt{3} x}{3}
--- b: -------------------------------
v0^2:
\frac{60 m^{2}}{s^{2} \left(1 + \sqrt{3}\right)}
v0:
4.69*m
------
s
--- c: -------------------------------
0.951*m
0.275*m
--- d: -------------------------------
71.6
35.8
v:
4.65*m
------
s
--- e: -------------------------------
4.69*m
------
s
4.65*m
------
s