Подтвердить что ты не робот

Почему ускорение силы тяжести составляет 0,0004 в PhysicsJS?

Или, может быть, лучше, что это значит?

Какими должны быть единицы?

Если я пытаюсь имитировать трение против "фона", например:

return this
    .velocityDirection
    .mult(mu * this.mass * g)
    .negate();

Я ожидаю использовать g как 9.80665 м/с ^ 2. Он работал таким образом перед физикой:

var
    frictionForce;
    frictionForce = vec2.create();
    vec2.scale(
        frictionForce,
        vec2.negate(
            frictionForce,
            this.velocityDirection
        ),
        mu * this.mass * g
    );
return frictionForce;

Использул glMatrix для моей линейной алгебры.

Я рассматривал массу в килограммах и силах в ньютонах (и т.д.), но в физике JJ, похоже, не работает так. (Например: если у меня есть тело круга с радиусом 1, это 1, что? Потому что это будет иметь значение, когда я должен использовать это значение для чего-то еще, и когда "конвертирует" его в пиксели на экране)

Теперь, когда я использую физическую библиотеку, я чувствую, что мне не хватает какой-то физики...

Надеюсь, кто-то может указать мне в правильном направлении, чтобы понять это лучше. Я сейчас просматриваю Документы API и многому учусь, но не нахожу ответы, которые я желаю.

UPDATE

Я получил очень простой ответ. Это просто чтобы кто-нибудь заинтересовался, чтобы узнать, что я тогда сделал...

Благодаря Jasper и dandelany я пришел к пониманию того, как некоторые из PhysJJ работают намного лучше. Для достижения моей "мечты" использования входных данных в ньютонах, квадратов метров в секунду (и т.д.) В PhysicsJS (а также настраиваемых пикселей на метр) я решил создать еще один интегратор.

Это просто небольшое изменение исходного (и стандартного) интегратора верб. Я объясняю это более или менее в этой (грубой) статье Метры, секунды и ньютоны в PhysicsJS

4b9b3361

Ответ 1

Единицы - это пиксели для расстояния и миллисекунды для времени.

Таким образом, ускорение составляет 0.0004 пикселей/мс/мс

Использование счетчиков не имеет смысла по целому ряду причин. Количество пикселей на дюйм изменяется в зависимости от устройства. Кроме того, даже если вы сделали конверсию, ускорение 9,8 м/с/с показалось бы очень быстрым, потому что обычно компьютерное моделирование хочет дать вид смотреть на него издалека... так что вы не захотите метр на экране, чтобы соответствовать показателю в моделировании.

Ответ 2

По-видимому, я не могу комментировать сообщения, но вот последующая реакция на ответ Джаспера, так как вы попросили совета по созданию преобразования:

Джаспер дает единицы как 0.0004 px/ms/ms (или px/ms ^ 2). Знание единиц делает это преобразование довольно простым с помощью отмены единицы. Сначала мы преобразуем эту цифру в px/s ^ 2:

0.0004 px/ms^2 * 1000 ms/s * 1000 ms/s = 400 px/s^2

Поскольку мы знаем, что гравитация на Земле равна ~ 9.8 m/s^2, это означает, что значение по умолчанию имитирует масштаб:

400 px/s^2 * (1/9.8) s^2/m ~= 41 px/m

Таким образом, с установкой по умолчанию, PhysicsJS имитирует мир, где метр составляет 41 пиксель в длину. Если мы используем ваш пример, где "180-сантиметровый человек имеет высоту 50 пикселей", мы преобразуем его в шкалу:

50px / 0.180m ~= 278px/m

Преобразуйте это обратно в px/ms ^ 2 с ускорением 9,8 м/с ^ 2, и вы получите:

278 px/m * 9.8 m/s^2 * (1/1000) s/ms * (1/1000) s/ms ~= 0.00272 px/ms^2

Итак, чтобы имитировать мир, в котором человек размером 180 см высотой 50 пикселей, вы использовали бы 0.00272 для параметра y-acceleration PhysicsJS.

Ответ 3

Из Основное использование PhysicsJS - Поведение

// add some gravity
var gravity = Physics.behavior('constant-acceleration', {
    acc: { x : 0, y: 0.0004 } // this is the default
});

У вас есть контроль над тем, как работает гравитация, но он, похоже, не дает ссылки на единицу.