或许,更好,它是什么意思?
单位应该是什么?
如果我试图模拟与“背景”的摩擦,就像这样:
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
中解释它答案 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
});
您可以控制重力的工作方式,但它似乎没有提供单位参考。