【发布时间】:2012-03-24 06:29:58
【问题描述】:
所以我一直在研究支持多边形和圆形的 2d 物理引擎。我已经将分离轴定理用于除圆-圆之外的所有碰撞组合。这是引擎的基本格式:
*注意:不是实际代码
推进所有身体。
for every body a
{
Vector2 sum = Vector2.Zero;
for every body b where b != a
{
sum += a.collides(b).MinimumTranslationVector;
}
a.Position += sum;
a.velocity += sum;
}
这是我遇到的问题的视频:http://www.youtube.com/watch?v=kSZeuP4AiQ0&feature=youtu.be
错误是在开头附近看到的弹簧效应。我一直在绞尽脑汁想这个问题,但我一无所获。谁能告诉我是什么问题?
【问题讨论】:
-
你指的是堆栈内的弹性吗?
-
是的,我指的是堆栈内的弹性。
-
这可能是由很多事情引起的。物体的大小、质量、重力、你的碰撞处理......这是相当正常的事情。我不确定你如何处理你的碰撞,但是如果新的顶部“盒子”与堆栈的顶部发生碰撞,你只是处理这个新的碰撞,还是你也迭代地考虑堆栈中的新碰撞?
-
我只是迭代地解释堆栈中的新碰撞。目前,我认为问题在于盒子与堆栈顶部发生碰撞,但堆栈顶部向下移动而不是盒子向上移动。我的引擎目前也处于初始阶段。我没有考虑质量、动量、旋转等。
-
如果你想要真实感,你的“力量”需要影响“速度”而不是“位置”。
标签: physics-engine