math - 游戏物理近似:对象与水的交互。如何模拟浮力?
问题描述
我正在 Godot 中制作一个关于在河上划皮划艇的基于物理的游戏。我正在使用 v3.1.1.stable.official 和 GDscript。水是用着色器显示的,我可以创建一个平面或巨大的立方体来表示表面。
我想制作一个系统,根据它在水位平面简化中的淹没程度对皮划艇施加力。皮划艇还没有固定在石头上。我想根据船的哪个部分以及有多少浸没在水中,在船上的准确点上施加正确的力的大小和方向。
我知道浮力是 p(水的密度)乘以 g(引力常数,9.81m/s^2)乘以 V(淹没的体积)
F=p*g*V
并且我可以在我希望的任何时候应用它。
apply_impulse(Vector3(.1, 0, 0), Vector3.UP*F)
add_force(Vector3(.1, 0, 0), Vector3.UP*F)
我认为施加力的点是被淹没的体积的 3d 质心,并且它会垂直倾斜,直接从水的“平面”出来,但是,我只是在猜测,我很容易错误的。
我不介意将船简化为 3d 椭圆的近似值。我通过运动学和能量对物理学以及微积分通过导数都有很好的掌握。如果有用的话,我可以学习积分或其他微积分函数,但是,我希望有某种内置的 Godot 函数可以让我免于 3d 微积分,并为皮划艇的船体编写一个复杂的 3d 函数。
TLDR,我需要一种方法来找到:
- 在理想平坦的水体中以任何方向/位置浸没的船的体积
- 船上应施加力的点
- 力应该在的方向
解决方案
推荐阅读
- javascript - UnhandledPromiseRejectionWarning:DiscordAPIError:无法发送空消息
- python - 创建主要因素列表的问题(编辑:标题应该说“因素列表”,而不是“主要因素列表”)
- ios - 如何修复 Shell 脚本调用错误 MapFileParser.sh:Xcode 中的权限被拒绝
- excel - 通过 VB 打开一个 excel 文件 - 无法加载文件或程序集
- python - 对于包含多个字符串的大型 .CSV 列是否有任何时间拆分功能?
- swiftui - 如何在 SwiftUI 中通过 ViewBuilder 访问 TupleView?
- python - instancemethod'对象没有属性'return_value'
- windows - 什么是“ms-cxh-full://0.0.135.7”?
- javascript - 样式化 HTML5 日期
- android - 对通过 startActivity 创建的 AppCompatActivity 对象的引用