Библиотека Cannon.js обеспечивает реалистичное моделирование физики для трёхмерных объектов, включая расчёт линейной и угловой скорости тел. Эти величины являются фундаментальными для динамики тел, так как определяют движение и вращение объектов в пространстве.
Линейная скорость (velocity) —
векторная величина, описывающая изменение положения тела в пространстве
за единицу времени. В Cannon.js каждое тело типа Body имеет
свойство velocity:
const sphere = new CANNON.Body({
mass: 5,
shape: new CANNON.Sphere(1)
});
sphere.velocity.set(0, 10, 0);
mass — масса тела. Масса напрямую влияет на поведение
при столкновениях.velocity.set(x, y, z) — установка компонентов линейной
скорости по осям X, Y и Z.Расчёт линейной скорости при действии силы осуществляется через закон Ньютона:
[ {new} = {old} + t]
где:
В Cannon.js применение силы осуществляется через методы:
sphere.applyForce(new CANNON.Vec3(0, 100, 0), sphere.position);
Угловая скорость (angularVelocity)
описывает вращательное движение тела. Она представляет собой вектор,
направление которого совпадает с осью вращения, а длина — скорость
вращения в радианах в секунду. В Cannon.js используется аналогичная
система:
sphere.angularVelocity.set(0, 5, 0);
sphere.applyTorque(new CANNON.Vec3(0, 10, 0));
Момент силы (torque) связан с угловой
скоростью через уравнение:
[ {new} = {old} + I^{-1} t]
где:
Cannon.js автоматически вычисляет тензор инерции для стандартных форм, таких как сферы, кубы или цилиндры, что упрощает работу с вращением.
При столкновениях или контакте с другими телами одновременно изменяются и линейная, и угловая скорости. Для реалистичного моделирования применяются коэффициенты трения и упругости:
sphere.material = new CANNON.Material({
friction: 0.4,
restitution: 0.6
});
friction влияет на изменение угловой скорости при
контакте с поверхностью,restitution — коэффициент упругости, влияющий на
скорость отскока.Cannon.js вычисляет эффекты трения через импульсные силы, которые одновременно корректируют линейную и угловую скорости тела в зависимости от точки контакта и направления силы трения.
Для создания динамической сцены с линейной и угловой скоростью обычно выполняют следующие шаги:
const world = new CANNON.World();
world.gravity.set(0, -9.82, 0);
const box = new CANNON.Body({
mass: 2,
shape: new CANNON.Box(new CANNON.Vec3(1, 1, 1))
});
box.position.set(0, 5, 0);
box.velocity.set(1, 0, 0);
box.angularVelocity.set(0, 2, 0);
world.addBody(box);
const timeStep = 1 / 60;
world.step(timeStep);
velocity и angularVelocity тел.body.velocity.clampLength(0, 20);
body.angularVelocity.clampLength(0, 10);
world.step(fixedTimeStep)) обеспечивает предсказуемое
поведение линейной и угловой скорости.damping уменьшает искусственные
колебания:body.linearDamping = 0.01;
body.angularDamping = 0.01;
linearDamping — снижение линейной скорости со
временем,angularDamping — снижение вращения.В графических движках (Three.js или Babylon.js) свойства
velocity и angularVelocity Cannon.js
применяются для обновления позиции и ориентации объектов:
mesh.position.copy(body.position);
mesh.quaternion.copy(body.quaternion);
position соответствует интегрированной линейной
скорости,quaternion — угловой скорости, вычисленной через тензор
инерции.Таким образом, Cannon.js обеспечивает тесную интеграцию физических свойств с визуальной симуляцией.
Линейная и угловая скорости — базовые элементы, от которых зависит реалистичность движения объектов, корректное взаимодействие при столкновениях и реакция на внешние силы и моменты.