0

I have the coordinates of say 10 points at different time levels and I wish to join those coordinates to make it look like a trajectory?

def euler_method(points, x_dot, y_dot, x1, x2, time_step, n_steps):
    n_points = len(points[:, 0])
    point_trajectory = np.zeros((n_points, 2, n_steps))
    for i in range(0, n_steps):
        point_trajectory[:, :, i] = points
        f1 = sp.lambdify((x1, x2), x_dot, "numpy")
        f2 = sp.lambdify((x1, x2), y_dot, "numpy")
        u = f1(points[:, [0]], points[:, [1]])
        v = f2(points[:, [0]], points[:, [1]])                  
        points_new_x = points[:, [0]] + u*time_step
        points_new_y = points[:, [1]] + v*time_step
        points = np.hstack((points_new_x, points_new_y))
     return point_trajectory

def plot_trajectory(points_at_diff_time) - Is what I want to create

I am not able to think how to represent it. Please suggest how to do it, preferably in matplotlib.

EDIT: Something like this - moving points with different coordinates at different times.

enter image description here

Manish
  • 458
  • 6
  • 19

1 Answers1

1
import numpy as np
import matplotlib.pyplot as plt

# make fake data to test with
pt = np.zeros((6, 2, 3)) # 6 points, (x,y), 3 timesteps
pt[:,0] = [-2,-1,1] # x=time, same for all

# set y values
pt[0,1] = [3,4,4.5]
pt[1,1] = [2,2.9,3.4]
pt[2,1] = [1,1.9,2.4]
pt[3,1] = [0,0.6,1.0]
pt[4,1] = [-1.5,-1.6,-1.6]
pt[5,1] = [-2.8,-3.7,-3.8]

# now plot: x and y are 2D
x = pt[:,0].T
y = pt[:,1].T

plt.plot(x, y)
plt.show()

resulting plot

If you want to smooth the lines, see here: https://stackoverflow.com/a/5284038/4323

Community
  • 1
  • 1
John Zwinck
  • 239,568
  • 38
  • 324
  • 436
  • This method was elegant and really fulfilled the purpose. Can you please explain the general idea behind this approach? Does it always take each row independently when you plot a matrix wrt to a matrix? – Manish Aug 08 '16 at 04:34