# Plotting a closed curve in 3D

How do you plot a closed curve in Julia? For instance using `Plots.jl`. I would like to draw an ellipse into a 3-dimensional plot.

Maybe these give some ideas

https://lazarusa.github.io/Webpage/codeJuliaMakie.html#collapse3dplots

2 Likes

With Plots.jl gr() you can draw parametric curves as follows:

``````using Rotations, Plots; gr()

M(u) = [a/2*cos(u), b/2*sin(u), 0]    # ellipse in X-Y plane
RM(u) = RotXYZ(α,β,γ) * M(u) .+ C     # rotated + shifted ellipse in 3D

C = [1, 1, 2]               # center of ellipse
α, β, γ = π/4, 0, π/3       # Euler angles
a, b = 5.0, 2.0             # ellipse principal axes
u = LinRange(0, 2π, 72)
xs, ys, zs = [[p[i] for p in RM.(u)] for i in 1:3]

p = plot(xs,ys,zs, lc=:blue, lw=3, ratio=1, legend=false, xlabel="X",ylabel="Y",zlabel="Z")
`````` Can also add some X-Y-Z projections to help 3D visualization:

``````# project curve to X-Y-Z planes
xl, yl, zl = xlims(p), ylims(p), zlims(p)
plot!(xs, ys, zl.+ 0*zs, lw=1, lc=:lightgray)
plot!(xs, yl .+ 0*ys, zs, lw=1, lc=:lightgray)
plot!(xl .+ 0*xs, ys, zs, lw=1, lc=:lightgray)
plot!(xs,ys,zs, lc=:blue,lw=3,xlims=xl,ylims=yl,zlims=zl) # plot again to front
`````` 4 Likes

Can you post the code you used to draw the x,y,z projections?

1 Like

@cossio, as requested, see above.

NB: last drawing using Euler angles: `α, β, γ = -π/6, -π/6, -π/2`

2 Likes