Graficar Tiro Parabólico

Iniciado por Boris Morales, 18 Noviembre 2020, 19:08 PM

0 Miembros y 1 Visitante están viendo este tema.

Boris Morales

Amigos tengo el siguiente código:

Código (python) [Seleccionar]

from math import pi, tan, cos, sin
from math import radians
import numpy as np
from matplotlib.pylab import *
import matplotlib.pyplot as plt
from math import *
from sympy import *
from sympy.plotting import *
from time import *
from scipy import *

while True:
    try:
        vi = float(input("Introduzca la velocidad inicial en (m/s) : "))
        break
    except ValueError:
        print("Cantidad Incorrecta")
print("m/s =",vi)

while True:
    try:
        angulo = int(input("Introduzca el ángulo en grados: "))
        break
    except ValueError:
        print("\nCantidad Incorrecta\n")
print(angulo,"°")#no es necesario, lo uso para que vayamos viendo el resultado

while True:
    try:
        g = float(input("Introduzca el valor de gravedad en m/s^2: "))
        break
    except ValueError:
        print("\nCantidad Incorrecta\n")
print("\ng =",g)

grados = ((angulo*pi)/180)
print ("\ngrados =",grados)

while True:
    try:
        xo = float(input("Posición horizontal inicial [x0]: "))
        break
    except ValueError:
        print("\nCantidad Incorrecta\n")

while True:
    try:
        yo = float(input("Posición vertical inicial [y0]: "))
        break
    except ValueError:
        print("\nCantidad Incorrecta\n")


a = tan(grados)
b = ((g)/((2*vi*2)*cos(grados)*2))
print()
ymax=(vi**2)*(np.sin(grados)*sin(grados))/(2*g)
xmax=(vi**2)*(np.sin(2*grados))/(g)
vho = vi*(cos(radians(angulo)))
vver = vi*(sin(radians(angulo)))
print("Un proyectil lanzado con una velocidad inicial de Vo=",vi,"m/s y un ángulo de α=",angulo,"°,")
print("iniciará su trayectoria con una velocidad horizontal de vxO: ",format(vho,".3f"),"m/s,")
print("y una velocidad vertical de vyO: ",format(vver,".3f"),"m/s.")
print()
print("Los parámetros más relevantes de su trayectoria son:")

tmax=(vi*sin(grados))/(g)
tv=2*(tmax)
print()
print(str("La altura máxima  alcanzada por el proyectil es: Ymax")+" = "+str(ymax)+" m")
print()
print(str("El alcance máximo horizontal  del proyectil es: Xmax")+" = "+str(xmax)+" m")
print()
print("La altura máxima (m) alcanzada por el proyectil es: Ymax =",format(ymax,".2f"))
print()
print("El alcance máximo horizontal(m) del proyectil es: Xmax =",format(xmax," .2f"))
print()
print("El tiempo máximo t1max (s) que alcanza el proyectil para el ángulo β es: t1max =",format(tmax,".2f"))
print()
print("El tiempo de vuelo t1v(s) que alcanza el proyectil para el angulo β es: t1v =",format(tv,".2f"))
print("----------------------------------------------------------------------")
print("----------------------------------------------------------------------")

# Definimos la ecuación de la trayectoria
def f(x):
    return(a*x-b*x**2)
x=np.linspace(0,xmax,500)

# añadimos el subtitulo
plt.suptitle("CINEMATICA",fontsize=20,color="red")

#añadimos las etiquetas de los ejes
xlabel("xmax",fontsize=20,color="red")                                     
ylabel("ymax",fontsize=20,color="blue")
#añadimos texto
plt.text(((np.argmax(f(x)))/2),np.max(f(x))+1,"vi=",fontsize=10)
plt.text(((np.argmax(f(x)))/2)+11,np.max(f(x))+1,(str(vi)+"m/s"),fontsize=10)

# Añadimos la rejilla en la gráfica
plt.grid(True)                                                             
plt.grid(color = '0.5', linestyle = '--', linewidth = 1)
# Añadimos los ejes
# plt.axis("tight")

# dibujamos y ponemos etiquetas a la gráfica
plt.text(3,1,angulo,fontsize=10)
plt.plot(x, f(x), "red", linewidth = 2, label = (str(angulo)+"º"))



Que quisiera me arrojara algo así



Me pudieran orientar por favor  ;D

tincopasan

parece que esto es mucho proyecto para vos y no aprendés lo elemental, como dije antes, no voy a hacer el código pero te diré que con copiar y pegar no te alcanza, pero bueno:

Código (python) [Seleccionar]

from math import pi, tan, cos, sin
from math import radians
import numpy as np
#from matplotlib.pylab import *  no lo usas
import matplotlib.pyplot as plt
#from math import * ya estás importando lo que necesitas
#from sympy import * no lo usas
#from sympy.plotting import * no lo usas
#from time import * no lo usas
#from scipy import * no lo usas


muchas de esas importaciones hacen más lerda la ejecución o la traban directamente

Código (python) [Seleccionar]

xlabel("xmax",fontsize=20,color="red")  # linea 93  estas variables como tal no sirven                                     
ylabel("ymax",fontsize=20,color="blue") # linea 94


cambialas por:

Código (python) [Seleccionar]

plt.xlabel("xmax",fontsize=20,color="red")                                     
plt.ylabel("ymax",fontsize=20,color="blue")


por último en lo que pusiste no se si te falto copiar pero falta la lína más importante al final:

Código (python) [Seleccionar]

plt.show()


python es simple y muchas bibliotecas también, pero hay que leer e intentar.

te volveré a ayudar solo si modificas y agregas algo que intentes aunque no este del todo bien.





Boris Morales

Eres muy amable tincopasan, apesar de que siempre te doy molestias  :-(

Y créeme que si lo intento por eso no me canso de buscar, pero si muchas gracias por tu consejo y sabiduría  :-[

Y si no es molestia, podrías recomendarme algún libro, o canal de youtube para seguir aprendiendo más???

tincopasan

no puedo ayudarte con respecto a youtube, no lo uso para python pero  con buscar hay muchos, elegí el que te guste. En cuanto a libros en la red está lleno, en lo particular hace mucho leí uno que me gustó, pero no sé si puedo poner un link porque tiene copyright y está en inglés, que no aclaraste en que idioma buscas.