Qui, ho un'equazione parametrica.Python - Tracciare i vettori di velocità e accelerazione in determinati punti
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
t = np.linspace(0,2*np.pi, 40)
# Position Equation
def rx(t):
return t * np.cos(t)
def ry(t):
return t * np.sin(t)
# Velocity Vectors
def vx(t):
return np.cos(t) - t*np.sin(t)
def vy(t):
return np.sin(t) + t*np.cos(t)
# Acceleration Vectors
def ax(t):
return -2*np.sin(t) - t*np.cos(t)
def ay(t):
return 2*np.cos(t) - t*np.sin(t)
fig = plt.figure()
ax1 = fig.gca(projection='3d')
z = t
ax1.plot(rx(z), r(z), z)
plt.xlim(-2*np.pi,2*np.pi)
plt.ylim(-6,6)
ax.legend()
Quindi ho questa equazione parametrica che crea questo grafico.
ho definito la mia velocità e l'accelerazione parametrici equazioni sopra nel mio codice.
Quello che voglio fare è tracciare i vettori di accelerazione e velocità nel grafico della mia posizione sopra in punti definiti. (Id est, t = pi/2, 3pi/2, 2pi)
Qualcosa di simile a questo:
Python/matplotlib : plotting a 3d cube, a sphere and a vector?
ma voglio fare qualcosa di più semplice dal momento che ho per definire ogni punto t in due equazioni.
È possibile una cosa del genere? Posso solo trovare campi vettoriali e cosa no.
Grazie.
Modifica domanda
# t = pi/4
t_val_start_pi4 = np.pi/4
vel_start_pi4 = [rx(t_val_start_pi4), ry(t_val_start_pi4), t_val_start_pi4]
vel_end_pi4 = [rx(t_val_start_pi4) + vx(t_val_start_pi4), ry(t_val_start_pi4)+vy(t_val_start_pi4), t_val_start_pi4 ]
vel_vecs_pi4 = (t_val_start_pi4 , vel_end_pi4)
vel_arrow_pi4 = Arrow3D(vel_vecs_pi4[0],vel_vecs_pi4[1], vel_vecs_pi4[2], mutation_scale=20, lw=1, arrowstyle="-|>", color="b")
axes.add_artist(vel_arrow_pi4)
E mi daranno un errore che dice Tuple out of index
Quanto segue mostra come disegnare frecce. Una volta che calcoli la posizione della coda del vettore, la lunghezza del vettore, la direzione del vettore e decidi lo stile del vettore, puoi usarlo per disegnare il vettore: http://matplotlib.org/examples/pylab_examples/arrow_simple_demo.html – boardrider
così il il primo zero rappresenta la posizione delle code e il prossimo rappresenta la lunghezza dei vettori? 'ax.arrow (0, 0, 0.5, 0.5, head_width = 0.05, head_length = 0.1, fc = 'k', ec = 'k')' – DarthLazar
@DarthLazar - Vedere la [documentazione] (http: // matplotlib .org/api/axes_api.html # matplotlib.axes.Axes.arrow) per quel metodo –