DifferentialEquations path animation
using Makie
using OrdinaryDiffEq
using Statistics
function lorenz(du,u,p,t)
du[1] = 10.0*(u[2]-u[1])
du[2] = u[1]*(28.0-u[3]) - u[2]
du[3] = u[1]*u[2] - (8/3)*u[3]
end
u0 = [1.0; 0.0; 0.0]
tspan = (0.0, 10.0)
prob = ODEProblem(lorenz, u0, tspan)
sol = solve(prob, Tsit5())
t = Node(tspan[1])
trajectory = lift(t; init = [Point3f0(sol(t[], idxs = [1,2,3]))]) do t
push!(trajectory[], Point3f0(sol(t, idxs=[1,2,3])))
end
endpoint = lift(t->[Point3f0(sol(t, idxs = [1,2,3]))], t)
xm, xM = extrema(sol[1,:])
ym, yM = extrema(sol[2,:])
zm, zM = extrema(sol[3,:])
limits = FRect3D((xm,ym,zm), (xM-xm,yM-ym,zM-zm))
scene = lines(trajectory, limits = limits, markersize = 0.7)
meshscatter!(scene, endpoint, limits = limits, markersize = 0.5, color = :red)
eyepos = Vec3f0(100, 5.0, 25)
N = 1000
record(scene, "output.mp4", LinRange(tspan..., N)) do tᵢ
global eyepos
push!(t, tᵢ)
eyepos = Vec3f0(eyepos[1] - (N / 10000), eyepos[2], eyepos[3])
update_cam!(scene, eyepos, mean(trajectory[]))
sleep(0.001)
end