Почему ускорение силы тяжести составляет 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
Ответы
Ответ 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
});
У вас есть контроль над тем, как работает гравитация, но он, похоже, не дает ссылки на единицу.