ГоловнаСтаттіМережі Пружин-Мас

Мережі Пружин-Мас: Закон Гука, Інтеграція Верлея та Поширення Хвиль

Закон Гука та інтеграція Верлея дозволяють мережі з’єднаних мас коливатися, тремтіти та залишатися чисельно стабільними.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Мережа з пружинами та законом Гука

Пружінно-масивна система – це, по суті, точка маси, з’єднані між собою пружинами, кожна з яких тягнеться або відштовхується відповідно до закону Гука: F = -k·x, де x – величина розтягу чи стиснення пружини відносно її положення спокою, а k – її жорсткість. Якщо зібрати достатню кількість таких систем у вигляді ланцюга, сітки, кола або зіркової топології, то ви отримаєте мережу, здатну на диво складну колективну поведінку – хвилі, що поширюються по ланцюгу, сітка, яка змушує мембрану барабана вібрувати, або зірка, яка коливається від своєї спокійної форми – все це завдяки застосуванню однієї вимірової сили до кожного елемента мережі.

for each spring (mass A, mass B, restLength, k):
    delta   = posB - posA
    stretch = length(delta) - restLength
    force   = k * stretch * normalize(delta)
    applyForce(A,  force)
    applyForce(B, -force)     // equal and opposite, Newton's third law
add damping proportional to relative velocity along the spring
жива демонстрація · пов'язана симуляція● LIVE

Чому інтеграція Верле́та замість наївного підходу

Перетворення цих сил у рух означає інтегрування другого закону Ньютона, і найпростіший вибір — явна еулерівська інтеграція, де кожен мас рухається зі своєї старої швидкості, схильний додавати енергії на кожному кроці та призводить до того, що мережа пружин розгортається у неконтрольовані, шалені коливання, особливо з жорсткими пружинами або грубим кроком часу. Замість цього в даному симуляторі використовується інтеграція Верле́та: кожен мас запам'ятовує своє попереднє положення, і наступне положення виводиться безпосередньо з останніх двох, x_next = 2·x_current − x_previous + a·h² (a = сила / маса) // швидкість не зберігається явно: v ≈ (x_current − x_previous) / h Ця форма, яка іноді називається положенням Верле́та або Störmer-Verlet, є улюбленою для розв’язків пружин та тканини з дуже практичної причини: обмеження та перетягування легко застосовувати. Підчепліть масу за мишкою, і ви просто встановлюєте її положення безпосередньо — немає окремої швидкості, яку потрібно узгодити, оскільки швидкість автоматично обчислюється на наступному кроці з різниці між двома збереженими позиціями. Це також симплекточна інтеграція, що означає, що вона зберігає тінь енергії, яка залишається обмеженою протягом тривалих пробігів замість того, щоб відхилятися, що саме дозволяє мережі пружин стабільно встановлюватися в правдоподібний, нерозбухаючий рівноважний стан, а не отримувати енергії з нізвідки.

x_next = 2·x_current − x_previous + a·h²      (a = force / mass)

// velocity is implied, never stored directly:
v ≈ (x_current − x_previous) / h

Топологія визначає, що може робити мережа

Ланцюгову топологію — маси, з’єднані між собою в єдину лінію — є найпростішим налаштуванням для спостереження за поширенням хвиль: смикніть один кінець і порушення видиміше просувається вниз по ланцюгу зі швидкістю, встановленою жорсткістю пружини та масою кожного вузла, дискретний аналог хвилі на струні. Мережу з сітчастою топологією розширюють у дві розмірності, дозволяючи натиснути в центрі, щоб хвиля розповсюджувалася по колу, подібно до барабана або тренування. Круг замикає ланцюг у петлю, тому відправлена хвиля може конструктивно інтерферувати з собою. Зірка — багато зовнішніх мас, з’єднаних із спільною центральною точкою, і часто між собою — поводиться як окремий гнучкий об'єкт, який коливається та встановлюється як ціле, корисна для форм у стилі м’якого тіла.

Жорсткість (k) та демпфування є двома ручками, які найбільше впливають на відчуття мережі. Висока жорсткість із низьким демпфуванням створює швидке, пружне, майже тверде рух, де хвилі просуваються швидко і майже не втрачають енергії; низька жорсткість із високим демпфуванням створює повільне, тягуче занурення чогось наближеного до желе. Оскільки інтеграція Verlet є беззаперечно більш дружньою до твердих пружин, ніж явний Ейлер, ця симуляція може досить сильно підвищити жорсткість і все ще залишатися чисельно стабільною з частотою в реальному часі.

Frequently asked questions

Чому симуляція використовує інтегрування Верле замість простого застосування сил безпосередньо?

Безпосереднє переміщення положення та швидкості вперед, як у найпростішому методі (явному Ейлера), схильне до додавання енергії в кожному кадрі, що призводить до збільшення коливань мережі пружин замість їхнього затихання – особливо з жорсткими пружинами. Інтегрування Верле набагато стабільніше для саме такого типу системи та робить переміщення маси тривіальним, оскільки вам потрібно лише задавати положення, ніколи окрему швидкість.

Чому хвиля подорожує по ланцюгу замість того, щоб все рухалося одночасно?

Кожна маса відчуває лише пружини, безпосередньо приєднані до неї, тому будь-яке збудження на одному кінці має поширюватися від маси до маси вздовж ланцюга, займаючи певний час на кожному зв’язку – що є дискретною версією того, як хвиля проходить через безперервну нитку або мотузку.

Яка різниця між ланцюговою, сітчастою, круговою та зоряною топологіями тут?

Вони відрізняються лише тим, які маси з’єднані пружинами: ланцюг – це пряма лінія, яка добре підходить для спостереження лінійного поширення хвиль, сітка розширює це в два виміри, як мем барабана, коло – це замкнутий цикл, де хвилі можуть взаємодіяти одна з одною, а зоряна топологія з’єднує багато зовнішніх мас із спільною центральною точкою, створюючи єдичну коливальну форму, схожу на м'яку тіло.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Spring-Mass Network і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Spring-Mass Network

Що ви знайшли?

Додати кроки відтворення (опційно)