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