vector - 在 Chipmunk 中对物体施加正交力,使其绕其中心旋转

标签 vector chipmunk

我试图通过施加正交(与 body 方向)力并产生所需的扭矩来使 body 绕其自身中心旋转。然而,这也会移动 body (自然地),我只需要它来旋转。这是我的代码。请注意,我不想手动设置角度/方向,而是尝试通过使用此旋转力来实现。

cpFloat dot = cpvdot(turningN, cpvnormalize_safe(cpBodyGetRot(body)));
cpFloat cross = cpvcross(turningN, cpvnormalize_safe(cpBodyGetRot(body)));


cpVect rotN;
if (cross<=0) {
    rotN = cpvperp(cpvnormalize_safe(cpBodyGetRot(body)));
}else{
    rotN = cpvrperp(cpvnormalize_safe(cpBodyGetRot(body)));
}

cpVect rotF = cpvmult(rotN, 300*(1-dot));
cpBodyApplyForce(body, rotF, cpv(75,14));

turningN 是指示 body 应有的方向的向量。我制作点积,以便当 body 的方向朝所需方向移动时,我应用越来越少的旋转。

编辑

因此,正如 @DGH 指出的那样,我们需要添加一个方向和大小相同但与旋转力相反并朝向物体中心的力。因此,我只需要添加这行代码即可使其工作:

cpBodyApplyForce(body, cpvneg(rotF), cpvzero);

最佳答案

我不了解花栗鼠,但我了解一点物理学 - 在相反方向向物体中心施加第二个力,并适当缩放其大小以抵消不需要的运动。

这就像一个固定在固定轴上的轮子 - 当您向轮子边缘施加力时,它会旋转而不向前移动,因为轴会在相反方向施加反作用力。

关于vector - 在 Chipmunk 中对物体施加正交力,使其绕其中心旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012615/

相关文章:

objective-c - Cocos2d v2 + 花栗鼠 : Fails when adding shapes to a CCLayer

ios - 使用未声明的标识符 'SKSpriteNode'

objective-c - 什么是花栗鼠? (除了是一个物理引擎)

c++ - 结构 vector 只返回最后一个值

reflection - XNA 碰撞检测 - Vector2.Reflect - 帮助计算圆形 Sprite 的法线 - C#

c++ - C++中的双 vector 问题

iphone - 那里有什么好的 chipmunk/cocos2d 示例源吗?

c++ - 基于结构中 vector 大小的数组初始化 [c++]

c++ - 如何从 std::vector 中自动删除已完成的 future

ios - 找不到 -lObjectiveChipmunk 的库