问题标签 [physics-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
7211 浏览

c++ - C++ 运算符的速度/简单的数学运算

我正在研究一个物理引擎,我觉得它有助于更​​好地理解执行许多简单或复杂数学运算的速度和性能影响。

  1. 物理引擎的很大一部分正在清除不必要的计算,但是在什么时候计算足够小以至于不需要进行比较检查?

    • 例如:测试两条线段是否相交。在直接进入简单的数学之前是否应该检查它们是否彼此靠近,或者从长远来看,额外的操作会减慢这个过程?
  2. 不同的数学计算需要多少时间

    • 例如:(3+8) vs (5x4) vs (log(8)) 等。
  3. 不平等检查需要多长时间?

    • 例如:>、<、=
0 投票
1 回答
2274 浏览

ios - 有什么方法可以在 Box2D 中绘制凹多边形并检测与其他形状的碰撞

我是 Box2D 物理引擎的初学者。当我有一个不规则曲线的图像时,我正在尝试开发多边形。但是参考使用 Vertex Helper 的 Raywenderlich 演示教程,我正在绘制多边形,但在许多情况下它会产生凹多边形,并且当我执行我的项目时它会崩溃。所以如果可以获得一些关于凹面使用的帮助多边形会很棒。

任何帮助或建议表示赞赏。谢谢

0 投票
1 回答
1365 浏览

javascript - ammo.js 在 Google Chrome 中的性能

我和一个朋友正在使用 WebGL 开发游戏,在寻找一些物理引擎后,我发现了 ammo.js,它是一个端口或子弹物理库。我们实现了一个简单的例子,很快发现谷歌 Chrome 的帧率与 Firefox 或 Safari 相比非常糟糕。我说的是 chrome 获得了 10 FPS,而 firefox 获得了相当稳定的 60 FPS。

经过大量研究后,我发现这个博客确切地解释了 Chrome 与图书馆的问题。(tl;dr:ammo.js 使用 chrome 不鼓励的字典对象)

所以我的问题是:这个库有没有不使用字典的端口?如果没有,是否值得(甚至可行)修改原始 C++ 项目符号代码并重新移植它?如果前面的选项都不可能,你会推荐什么 javascript 物理引擎?

我知道这里的选择非常有限,但我认为这是值得的问题。

谢谢。

0 投票
1 回答
833 浏览

jquery - Box2djs,JS 物理引擎 - 为球对象设置背景图像?

在此处使用 Box2djs 插件: http ://www.crackin.com/dev/mms/physics/

...而我要做的就是用图像纹理填充球对象。我希望它像设置 css 值一样简单,但我似乎做得不对,因为标准背景相关的 css 规则都没有改变球。使用 math.random 我可以创建 5 个不同的类名来应用于每个球以创建不同的纹理对象。

这是它现在看起来的一个例子,与我可以使用图像使它们看起来像的东西相比: M&M Mock Image

这是我正在使用的物理引擎的特定构建... github.com/hrj/box2d-js ...它使用的是jQuery而不是Prototype。

0 投票
2 回答
1439 浏览

physics-engine - Bullet Physics MultiSphereShape Usage

  1. I am posting here because I have not been successful in finding a helpful answer either directly on the Bullet Physics forum or any of those associated forums which have either ported the library [JBullet, BulletCS] or incorporated it in their own product [Blender, Panda3d]. Here it seems, at least if I can ask the question properly, the odds seem best of getting a helpful reply.

  2. I want to simulate the rolling of dice. All the examples I can find seem content with using a Box shape. Mine is an interest in children's games, not Las Vegas. The defining difference, at least in my application, is that the dice [whether 6-sided, or something else, but let's just stick with 6-sided here] have 'kinder-gentler' rounded edges with no pointed corners.

  3. It seems that btMultiSphereShape would be just perfect for me -- me being someone who does not have the knowledge to construct any complex shape from lower-level primitives, me being someone who hopes to use what is already built into the collision intelligence of the Bullet engine, not someone trying to engineer any new, exotic behavior.

  4. With that preface I would really appreciate a succinct example of:

    a. how to pass the arguments to the btMultiSphhereShape constructor; b. how to configure the transform that needs to be passed to btDefaultMaotionState; and c. how to set the localInertia.

  5. I understand that this is a general-purpose library with classes that can support almost anything, but please, for a beginner, instead of discussions of those very nice attributes of a well-conceived toolkit, what would be most helpful to me [and I believe to many other users] would be a clear example of supplying those key properties to the necessary classes and methods to these specifics:

    a. a six-sided die with equal dimensions, let's make the rounded cube about 2cm per side; b. let's have the radius of the 'corners' a gentle 0.1.cm.

  6. Now, one more request, please. In order to observe the behavior of the die beginning with a simple 'drop', taking into account only forces due to gravity, please suggest a transform that will result in some kind of interesting tumbling result from a collision against the usual 'floor' example; in other words, it should impact the floor on a rounded corner.

0 投票
2 回答
3879 浏览

java - 凸多面体的质心

我有一个封闭的凸多面体,它由一组凸多边形(面)定义,这些凸多边形(面)由 3D 空间中的顶点数组定义。假设密度均匀,我试图找到多面体的质心。目前我用这个伪代码中的算法计算它。

这实质上是取面部质心的加权平均值。我不能 100% 确定这是正确的,因为我无法在网上找到正确的算法。如果有人可以确认我的算法或将我推荐给正确的算法,我将不胜感激。

谢谢。


[编辑]

所以这是我用来查找质心的实际 Java 代码。它将多面体分解成金字塔,这些金字塔会聚在多面体内部的任意点上。金字塔形心的加权平均值基于以下公式。

C all = SUM所有金字塔(C pyramid * volume pyramid)/volume all

这是(大量注释的代码):

请随时问我您对此可能有的任何问题或指出您看到的任何错误。

0 投票
2 回答
4949 浏览

c++ - 物理引擎的数值积分有哪些好的算法?

我一直在网上寻找我正在尝试编写有趣代码的物理引擎的集成方法(一定要喜欢那里的书呆子:P)。我找到了 Euler 的方法、RK4 和 Verlet(以及时间更正的版本)。我也一直在尝试想出一些我自己的方法。我想知道您是否知道其他任何您认为直观或有帮助的人。谢谢。

编辑:感谢您迄今为止的所有帮助。至于澄清:也许我的意思是数字积分。令人惊讶的是,在我所有的研究中,我没有找到我想要做的事情的技术名称!也许描述我的具体问题会使我的问题更清楚。假设我想模拟一个球在一个圆形(或一旦我实现 3d 的球形)引力场中移动。该球将遇到力矢量,该矢量可用于计算球在该特定刻度上所在点的相应加速度矢量。从你的物理课上,你知道速度 = 加速度 * 时间,但我的问题是球在技术上只是在那一刻,在微积分中用 dt 表示。明显地,

这是我实现欧拉数值积分方法的(成功)尝试:

因为加速度是恒定的,而且这个微分实际上是可以解决的(为什么我用它来测试,解决方案是位置 = 时间 ^ 2,这是相当准确的,但是如果你让它变得更复杂一点,例如,使加速度随着时间的推移,算法会非常迅速地失去准确性。再次感谢!

0 投票
1 回答
953 浏览

c++ - 如何在 Bullet Physics 中设置柔体的位置

我正在尝试将软体的运动锁定到 x 轴。我希望能够左右移动,但将其锁定在 z 轴的相同位置。

即使当我沿 x 轴应用速度时,由于空气阻力和我假设的软体移动方式,有时也会导致身体在 z 轴上向后移动。

为了解决这个问题,我想使用刻度回调来确保柔体的 z 位置始终为 0;

这是最好的方法吗?如果是,我该如何设置位置。

我已经尝试过 .transform() 和 .translate() 但没有设法让它工作。

谢谢。

0 投票
2 回答
633 浏览

geometry - 最适合正方形到四边形

我有一个由四个点组成的形状,A、B、C 和 D,其中唯一的位置是已知的。目标是将这些点转换为相对于彼此具有特定角度和偏移量。

例如:A(-1,-1) B(2,-1) C(1,1) D(-2,1),它应该被转换为一个完美的正方形(所有角度都是 90),AB、BC、CD 和 AD 之间的偏移量都为 2。结果应该是一个逆时针稍微旋转的正方形。

最有效的方法是什么?我将它用于一个简单的块模拟程序。

0 投票
1 回答
626 浏览

c++ - 如何更新变换矩阵(NewtonGameDynamics/OpenGL)?

我正在尝试使用牛顿物理和 OpenGL 模拟旋转框。这就是我已经实施的。

在渲染循环中我正在做这些事情。

我的问题是如何使用 matrix(box.mat) 绘制一个立方体(实际上是 8 个点)?如何使用矩阵计算更新的顶点?