我面临着在 C 中实时计算回旋曲线值的问题。
首先,我尝试使用 Matlab 编码器为菲涅耳公式的 quadgk 积分器获取自动生成的 C 代码。这在我的测试场景中基本上很有效。唯一的问题是它运行得非常慢(在 Matlab 以及自动生成的代码中)。
另一种选择是对通过直线连接样本点的单位回旋曲线的数据表进行插值(线性插值)。在我发现曲率只有很小的变化(沿着回旋曲线的微小步骤)后,我放弃了,结果显然会退化为线条。多么惊喜……
我知道可以使用不同的公式绘制圆,但在实际场景中经常会遇到曲率的低变化,并且航向 0° 和 360° 之间的 30k 个采样点无法为我的问题提供足够的角分辨率。
然后我在 R = inf 点附近尝试了泰勒近似,希望在我想要的任何地方都有明显的曲率。我很快意识到我不能使用超过 4 个项(15 的幂),否则多项式会很快变得不稳定(可能是由于双精度 fp 计算中的数值不准确)。因此,很明显,对于大的 t 值,精度会迅速下降。通过“大 t 值”,我指的是回旋曲线上的每个点,它们代表一条相对于零曲率点超过 90° 的曲线。
例如,当评估一条从 R=150m 到 R=125m 并进行 90° 转弯的道路时,我就在有效近似区域之外。相反,我在 204.5° - 294.5° 的范围内,而我的泰勒极限在单位回旋曲线的 90° 左右。
我现在有点随机尝试了。我的意思是我可以试着花时间在一个关于该主题的几十篇论文上。或者我可以尝试改进或结合上述一些方法。也许Matlab中甚至存在与Coder兼容且速度足够快的集成功能。
这个问题是如此根本,我觉得我不应该有那么大的麻烦来解决它。有什么建议吗?