Нашел комментарий одного из пользователей =)) :
Цитата:
|
XProger:
Верёвки и прочую soft-body (если постараться то и rigid-body) физику можно писать используя интегрирование Верле.
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.
joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos
Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.
link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5
Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует.
Пример работы такой физики.
|