Анимация пружины
Автор
3D-модель затухающих колебаний пружины
Импортируем пакет Plots и активируем plotlyjs:
Pkg.add("Plots")
using Plots
plotlyjs()
Инициализируем параметры пружины:
dur = 2 # продолжительность анимации
fps = 10 # кадры в секунду
r = 5 # радиус пружины
a, b = 1, 1 # параметры геометрии витков
n = 8 # количество витков
pstart, pend = 0.35, 0.64 # начальное и конечное положение пружины
k = 0.01 # коэффициент затухания
freq = 1.2 # частота колебаний
Создадим функцию построения 3D-модели пружины:
# функция построения 3D-модели
function SpringModel(r, a, b, p, n)
th = LinRange(0, 2π, 36)
ph = LinRange(0, n*2π, 36*n)
Ph = repeat(ph', length(th), 1)
Th = repeat(th, 1, length(ph))
X = (r .+ a .* cos.(Th)) .* cos.(Ph)
Y = (r .+ b .* cos.(Th)) .* sin.(Ph)
Z = a .* sin.(Th) .+ p .* Ph
return X, Y, Z
end
Выполним анимацию, применяя экспоненциальное затухание:
anim = @animate for dt in 1:dur*fps
P = ((pend - pstart) * exp(-k*dt) * cos(2π * dt * freq / fps) + pstart + pend) / 2
X, Y, Z = SpringModel(r, a, b, P, n)
surface(X, Y, Z; opacity=0.7, color=:jet, shading=:interp, xlabel="", ylabel="", zlabel="", title="Пружина", legend=false, aspect_ratio=:equal, background_color=:white, framestyle=:none)
end
gif(anim, "Пружина.gif", fps = fps)
Анимация отображает плавное затухание пружины.