Box2D C++ tutorials - Buoyancy

浮力:

    浮力使刚体受到一个与重力方向相反的推力,当刚体的密度比浸泡它的液体密度小的时候,就会产生浮力,就像苹果在水里或者氢气球在天空中,浮力的大小取决于被排掉的液体体积  注:高中物理的知识,浮力(F)= 液体密度(p) x 重力加速度(g) x 该物体排开液体的体积(v)。

    我们可以计算出排出液体的质量来模拟浮力效果,而这又可以通过液体密度x物体排开液体的体积来计算,所以现在的主要任务是计算出刚体跟液体的重叠部分的体积。

    我们可以用一个感应夹具来代表水,然后计算水跟其他夹具的重叠面积,一个完整的执行需要计算两个多边形,两个圆,一个多边形跟一个圆的交叉区域,在这篇文章里面,我们只讨论两个多边形的交叉区域。

    一旦两个多边形的重叠区域被找到,我们就可以用这个区域去计算需要的力,并且施加这个力在交叉区域的质心上,而且我们也需要提供一个拉力。

    浮力需要在每一个时间步上被计算出来,并且施加到刚体上,我们在BeginContact跟Endcontact这两个函数上跟踪一个链表,这个链表里面的元素是一个交叉夹具组,而且在每一个时间步我们都要遍历这个链表,并且施加必要的力,下面定义一个夹具组来方便后面的操作:

typedef std::pair<b2Fixture*, b2Fixture*> fixturePair;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值