焊接体的Box2d中心质量
Box2d center mass of welded bodies?
本文关键字:Box2d 更新时间:2023-10-16
我有一个由焊接体组成的结构。
我施加脉冲/力来移动结构,但我注意到结构并没有完全直线移动。它开始向矢量的方向移动,然后慢慢转动,最终绕圈。
问题在这里得到解决
看来问题在于力需要施加到质心上。但是,我不确定如何从焊接在一起的结构中获得质心。
我有结构中每个物体的质心,但它们都在中心。有没有办法计算复杂焊接结构的质心?
它就像取每个物体质心的世界坐标的加权和一样简单。
b2Vec2 GetWorldCentreOfMass(std::vector<b2Body> *bodies) {
// Compute total mass
float32 totalMass = 0.f;
for (b2Body &body : bodies) {
totalMass += body.GetMass();
}
// Compute centre of mass
b2Vec2 centreOfMass(0.f,0.f);
for (b2Body &body : bodies) {
b2Vec2 r = body.GetWorldCenter();
float32 m = body.GetMass();
centreOfMass += m*r / totalMass;
}
return centreOfMass;
}
请参阅:https://en.wikipedia.org/wiki/Center_of_mass#A_system_of_particles
然后使用无效ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point);
:
b2Vec2 centreOfMass = GetWorldCentreOfMass(bodies);
for (b2Body &body : bodies) {
body.ApplyLinearImpulse(impulse, centreOfMass);
}
相关文章:
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- 使用 vcpkg 安装 box2d
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- Box2D Contact Listener碰撞仅间歇性工作
- Box2D OpenGl Error
- Box2D 断言失败:kNormal > 1.19209289550781250000e-7F
- Box2D (C++) 三角形故障区域断言
- Box2D 如何处理位置和坐标?
- Box2D ContactListener未检测到碰撞
- SFML 和 Box2D SetUserData 无法将参数从 const char [4] 转换为 void *
- Box2D不寻常的错误.为什么 0阻止错误
- 为什么还要使用运动型身体?Box2D
- Box2D-从身体中获取固定装置的宽度,或者我什至应该尝试
- Box2D,联系听众:切勿调用BeginContact
- box2d -c 中删除主体
- 链接到由Emscripten编译的Box2D链接时的未定义符号
- 焊接体的Box2d中心质量
- 销毁 Box2D 主体 - 读取访问冲突错误
- 在Codelite IDE中使用Box2D
- Box2D-我应该多久在窗户循环中使用台阶