import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
%matplotlib inline
def lorentz(X, t, sigma, rho, beta):
x, y, z = X
return np.array([sigma * (y - x), x * (rho - z) - y, x * y - beta * z])
trajectory1 = odeint(
lorentz, np.array([1, 2, 3]), np.linspace(0, 30, 3000), args=(10, 28, 8.1 / 3)
)
trajectory2 = odeint(
lorentz, np.array([10, 2, 3]), np.linspace(0, 30, 3000), args=(10, 28, 8.1 / 3)
)
plt.plot(trajectory1[:, 0], trajectory1[:, 1])
plt.plot(trajectory2[:, 0], trajectory2[:, 1])
[<matplotlib.lines.Line2D at 0x7f8f10cea6a0>]
import plotly.graph_objects as go
go.Figure(
[
go.Scatter3d(
x=trajectory1[:, 0], y=trajectory1[:, 1], z=trajectory1[:, 2], mode="lines"
),
go.Scatter3d(
x=trajectory2[:, 0], y=trajectory2[:, 1], z=trajectory2[:, 2], mode="lines"
),
]
)
go.Figure(
[
# go.Scatter3d(
# x=trajectory2[:, 0], y=trajectory2[:, 1], z=trajectory2[:, 2], mode="lines"
# ),
go.Scatter3d(
x=trajectory2[:, 0], y=trajectory2[:, 1], z=trajectory2[:, 2], mode="lines"
),
],
layout=go.Layout(
scene=go.layout.Scene(
xaxis=dict(range=[-25, 25], autorange=False, zeroline=False),
yaxis=dict(range=[-25, 25], autorange=False, zeroline=False),
zaxis=dict(range=[0, 50], autorange=False, zeroline=False),
),
width=1000,
height=1200,
# title_text="Kinematic Generation of a Planar Curve", hovermode="closest",
updatemenus=[
dict(
type="buttons",
buttons=[
{
"args": [
None,
{
"frame": {"duration": 50, "redraw": True},
"fromcurrent": True,
"transition": {"duration": 50},
},
],
"label": "Play",
"method": "animate",
},
{
"args": [
[None],
{
"frame": {"duration": 0, "redraw": False},
"mode": "immediate",
"transition": {"duration": 0},
},
],
"label": "Pause",
"method": "animate",
},
],
)
],
),
frames=[
go.Frame(
data=[
go.Scatter3d(
x=trajectory2[:k, 0],
y=trajectory2[:k, 1],
z=trajectory2[:k, 2],
mode="lines",
marker=dict(color="blue", size=4),
)
]
)
for k in range(0, len(trajectory2), 10)
],
)