为什么PhysicsJS中的重力加速度为0.0004?

时间:2014-05-16 21:04:03

标签: javascript physics physicsjs

或许,更好,它是什么意思?

单位应该是什么?

如果我试图模拟与“背景”的摩擦,就像这样:

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

我希望使用g为9.80665 m / s ^ 2。它是在PhysicsJS之前以这种方式工作的:

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

将glMatrix用于我的线性代数。

我正在考虑以千克为单位的质量和以牛顿为单位的力量(等),但是在PhysicsJS中它似乎并不像那样工作。 (例如:如果我有一个半径为1的圆体,它是1是什么?因为当我必须将此值用于其他东西时,以及当它“转换”为屏幕上的像素时,它会有所不同)

现在我正在使用物理库,我觉得我错过了一些物理...

我希望有人可以指出我正确的方向来更好地理解它。我现在正在阅读API Docs并学习很多但不是我找到了我想要的答案。

更新

我收到了一个非常简单的答案。这只是为了让任何有兴趣知道我做了什么的人......

感谢Jasper和dandelany,我开始明白一些PhysicsJS的工作原理要好得多。为了实现我在PhysicsJS中使用牛顿输入,每秒平方米(等)的“梦想”(并且还有每米比例的可配置像素),我决定创建另一个积分器。

这只是原始(和默认)verlet集成器的略微变化。 我或多或少地在这篇(粗略)文章Metres, Seconds and Newtons in PhysicsJS

中解释它

3 个答案:

答案 0 :(得分:6)

单位是距离的像素,时间是毫秒。

因此加速度为0.0004像素/ ms / ms

出于各种原因,使用仪表没有意义。每英寸像素数根据设备而变化。此外,即使您进行了转换,9.8 m / s / s的加速度似乎也非常快,因为通常计算机模拟会让人看起来从远处看它...所以你不会想要一个屏幕上的仪表对应于模拟中的仪表。

答案 1 :(得分:5)

显然我无法对帖子发表评论,所以这里是Jasper答案的后续内容,因为您要求提供有关转换的提示:

Jasper将单位设为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 m / s ^ 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作为PhysicsJS y加速度参数。

答案 2 :(得分:0)

来自PhysicsJS Basic Usage - 行为

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

您可以控制重力的工作方式,但它似乎没有提供单位参考。