Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何用子弹物理来真实地模拟高尔夫击球?(包括现场演示) 背景_Javascript_Algorithm_Physics_Bulletphysics_Ammo.js - Fatal编程技术网

Javascript 我如何用子弹物理来真实地模拟高尔夫击球?(包括现场演示) 背景

Javascript 我如何用子弹物理来真实地模拟高尔夫击球?(包括现场演示) 背景,javascript,algorithm,physics,bulletphysics,ammo.js,Javascript,Algorithm,Physics,Bulletphysics,Ammo.js,我正在使用three.js和Bullet Physics library的ammo.js转换制作一个小型高尔夫游戏,但是我在让球真实移动方面遇到了一些问题 (如果您想了解这在实践中是如何工作的,我已经在上放了一个演示。) 问题: 什么是一个好的算法,以提供更现实的运动一个迷你高尔夫球 我试过的 在ammo.js中,有摩擦、线性阻尼和旋转阻尼选项 当球滚动时,摩擦设置似乎没有多大影响 我目前正在使用 body.setRestitution(0.8); body.setFriction(1); bo

我正在使用three.js和Bullet Physics library的ammo.js转换制作一个小型高尔夫游戏,但是我在让球真实移动方面遇到了一些问题

(如果您想了解这在实践中是如何工作的,我已经在上放了一个演示。)

问题: 什么是一个好的算法,以提供更现实的运动一个迷你高尔夫球

我试过的 在ammo.js中,有摩擦、线性阻尼和旋转阻尼选项

当球滚动时,摩擦设置似乎没有多大影响

我目前正在使用

body.setRestitution(0.8);
body.setFriction(1);
body.setDamping(0.2,0.1); // linear damping, rotational damping
问题 线性阻尼值较高时,球似乎减速过快

对于较低的值,似乎需要很长时间才能最终停止

当球在空中时,应用线性阻尼似乎根本不合理

分析 我认为问题可能是ammo.js中的线性阻尼导致了指数级的减速

我试过:

  • 录制高尔夫击球的视频
  • 测量每个帧中球的位置
  • 绘制球的位置和速度与时间的关系图
  • 结果如下所示。在我看来,速度分布更接近于线性而不是指数

    对于让ammo.js更真实的算法有什么建议吗


    我发现你在一个球形物体上使用“规则”摩擦力。在物理学中,圆形物体有一个单独的概念。我不知道Bullet Physics在其API中是否提供了这样一个概念。如果确实如此,请尝试将其替换为滚动摩擦对应物:

    body.setFriction(1);
    

    我在想,这就是“旋转阻尼”的含义。@Teepeemm阻尼只有在涉及到类似弹簧的振荡系统时才具有现实意义。大多数物理引擎中存在的“线性阻尼”和“旋转阻尼”概念没有实际意义。它们既可以在游戏中插入稍微虚假的物理,而一个简单的近似就足够了,也可以在物理模拟中保持稳定性。滚动摩擦和旋转阻尼是完全不同的。谢谢,这是非常有用的-一个恒定的力应该给我恒定的减速,我是在追求。奇怪的是,子弹物理C++中确实有一个设置摩擦,但就我所见,它并没有出现在AMMO.JS中(当我尝试使用它时,它给出了一个未定义的错误)。基本上,你想对球施加摩擦力,但是在球接触地面的点,而不是质心。同样,当球停止弹跳并与地面连续接触时,球的速度应为球上与地面接触的点的速度。你最终得到的结果是,旋转摩擦力减少了球的角动量和线动量。我可以看到,工作-我肯定有能力在非中心位置施力,我可以获得速度,所以我知道施力的方向。如果没有人知道为什么ammo.js中缺少setRollingFriction,我会用原力来试试——再次感谢!