我在使用当前正在开发的 javascript 应用程序时遇到问题。这是一个用于计算游艇船体流体静力学数据的船舶设计。我遇到的麻烦是我有两个相互关联的功能,都需要达到特定的结果。
为了澄清,用户输入设计位移,船体向上或向下移动,直到浸没体积等于设计位移。
用户还输入重心的纵向位置,船体倾斜直到浮心(浸没体积的质心)的纵向位置与重心对齐。
但是,俯仰船体会改变位移,向上或向下移动船体会改变浮力中心的位置。
我目前在做什么(伪代码)
function raiseAndPitch
while a < maxIterations
if boat.volume < designVolume
move boat down
else if boat.volume > designVolume
move boat up
else
done
a++
while b < maxIterations
if boat.cg.x > designCG.x
pitch boat forward
else if boat.cg.x < designCG.x
pitch boat aft
else
done
b++
if boat.cg.x == designCG.x && boat.volume == designVolume
return data
else
raiseAndPitch
我有最大数量的递归。然而,当一个或另一个中的一个非常小的移动导致位移量或浮力中心位置的大变化时,即使对这两个参数进行大量递归,这有时也无法收敛。
伪代码中未显示的是我收敛值的方式,请指出它是否与我的问题相关,我将添加它。
有没有更好的方法可以让我确保两个参数同时达到所需的值?