或者,更好的是,它是什么意思?
应该是什么单位?
如果我想模拟与"背景"的摩擦,像这样:
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文档,学到了很多东西,但我没有找到我想要的答案。我得到了一个非常直接的答案。
感谢Jasper和dandelany,我开始理解PhysicsJS是如何更好地工作的。为了实现我在PhysicsJS中使用牛顿,米每秒平方(等)输入的"梦想"(并且还具有每米可配置的像素比),我决定创建另一个积分器。
它只是原始(和默认)verlet积分器的一个微小变化。我在这篇(粗略的)文章中或多或少地解释了它
距离单位为像素,时间单位为毫秒。
所以加速度是0.0004
像素/ms/ms
由于各种原因,使用仪表没有意义。每英寸像素数的变化取决于设备。此外,即使你进行了转换,9.8米/秒的加速度也会显得非常快,因为通常计算机模拟都想给人一种从远处看的感觉……所以你不会希望屏幕上的仪表与模拟中的仪表相对应。
显然我还不能评论帖子,所以这里是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
所以,为了模拟一个180cm的人是50px高的世界,你可以使用0.00272
作为PhysicsJS的y-acceleration参数。
From PhysicsJS Basic Usage - Behaviors
// add some gravity
var gravity = Physics.behavior('constant-acceleration', {
acc: { x : 0, y: 0.0004 } // this is the default
});
你可以控制重力是如何工作的,但它似乎没有提供一个单位参考