我正在使用我正在处理的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
我有最多的递归次数。 然而,当一个或另一个中的非常小的运动在位移体积或浮力位置中心产生大的变化时,即使对两个参数进行大量递归,这有时也不会收敛。
伪代码中没有显示我收集价值的方式,请说明它是否与我的问题相关,我会添加它。
有没有更好的方法可以让我确保两个参数同时达到所需的值?