或者,也许更好,这意味着什么?
单位应该是什么?
如果我试图在“背景”下模拟摩擦,就像这样:
return this
.velocityDirection
.mult(mu * this.mass * g)
.negate();我希望使用g作为9.80665米/秒^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中使用以牛顿、秒平方(etc)表示的输入(并且还有可配置的像素/米比),我决定创建另一个积分器。
这只是最初的(和默认的) verlet积分器的一个细微的变化。我或多或少地在这篇(粗糙的) 米、秒和牛顿( PhysicsJS )文章中解释了它。
发布于 2014-05-17 16:25:23
单位是距离的像素,时间的毫秒。
加速度是0.0004像素/毫秒/毫秒
由于种种原因,使用计量器是没有意义的。每英寸像素数随设备的不同而变化。而且,即使你进行了转换,9.8米/秒/秒的加速速度看起来也是非常快的,因为通常计算机模拟都想从远处看它。所以你不希望屏幕上的仪表与模拟中的米相对应。
发布于 2014-06-06 19:51:41
显然,我还不能对帖子发表评论,所以以下是贾斯珀回答的后续内容,因为你问了一些关于转换的建议:
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米/秒^2,您将得到:
278 px/m * 9.8 m/s^2 * (1/1000) s/ms * (1/1000) s/ms ~= 0.00272 px/ms^2
因此,为了模拟一个180厘米的人身高为50‘d的世界,您可以使用0.00272作为PhysicsJS y-加速度参数。
发布于 2014-05-16 21:25:16
来自PhysicsJS基本用法 -行为
// add some gravity
var gravity = Physics.behavior('constant-acceleration', {
acc: { x : 0, y: 0.0004 } // this is the default
});你可以控制重力是如何工作的,但它似乎不能提供一个单位参考。
https://stackoverflow.com/questions/23704514
复制相似问题