#python #python-3.x #numpy
#python #python-3.x #numpy
Вопрос:
В принципе, у меня есть элемент под названием ligne, который полон данных из моделирования снаряда.(моделирование выполнено в коде # 1)
после этого я хотел бы создать тот же график в коде # 1, но при использовании данных в txt-документе вместо его вычисления.(Надеюсь, я ясно выражаюсь. Я не очень хорошо объясняю вещи)
Код # 1
import matplotlib.pyplot as plt
import numpy as np
v0=20 #en metres par seconde
teta=np.radians(60) #radians pour l'usage dans sin/cos
g=9.8 #accel. gravitationnelle de la terre
#fonction qui trace parabole
def parabol(x=0,y=0,t=0):
t=np.arange(0,(2*v0/g)*np.sin(teta),0.01)
x=v0*np.cos(teta)*t
y=v0*np.sin(teta)*t-(g/2)*t**2
plt.plot(x,y,"k")
return x,y,t
plt.axis('equal')
plt.grid('show')
x,y,t=parabol(0,0,0)
r=['{:.2f}, {:.4f}, {:.4f}n'.format(t[i],x[i],y[i]) for i in range(0,354)]
with open("parabol_results.txt",'w') as fic:
fic.write("#Les données suivantes nous donnent le temps que notre objet sera en déplacementn et sa position x,y au moment t")
fic.write("#Nous avons comme valeur initiales: v0=20 m/s et theta=60 degrés (pi/3) et les résultats sont (t,x,y)n")
fic.writelines(r)
fic.close()
plt.show()
Это код, который я сделал до сих пор, чтобы попытаться построить тот же график, но с использованием данных в parabol_results.txt
import matplotlib.pyplot as plt
import numpy as np
x=[]
y=[]
t=[]
with open("parabol_results.txt",'r') as fic:
ligne=[ligne.strip() for ligne in fic]
del ligne[0:2]
fic.close()
Мне было интересно, есть ли способ добавить мои x, y, t в списки, которые я создал, или, может быть, мне следует использовать array.
Большое вам спасибо за вашу помощь.
Ответ №1:
Привет, да, я отвечаю на свой собственный вопрос, потому что в итоге я понял это. Вот метод, который я нашел.
import matplotlib.pyplot as plt
import numpy as np
#ouvrir et lire le fichier
with open("parabol_results.txt",'r') as fic:
ligne=[ligne.strip().split(",") for ligne in fic]
del ligne[0:2] #les deux premieres lignes ont du texte (no data)
fic.close()
#separation des objets dans ligne en differente listes (x,y,t)
x=[x for t,x,y in ligne]
y=[y for t,x,y in ligne]
t=[t for t,x,y in ligne]
#passer en array les listes x,y,t
arr_x=np.asarray(x,dtype=np.float)
arr_y=np.asarray(y,dtype=np.float)
arr_t=np.asarray(t,dtype=np.float)
plt.axis('equal')
plt.grid('show')
plt.plot(arr_x,arr_y,color='k' )
#losanges avec un pas de 0.1
n=0
for i in t:
if float(i)==0.1*n:
plt.plot(arr_x,arr_y, marker='D',color='k')
plt.show()
разделите в списках, а затем преобразуйте в массив