Cでクロソイドの値をリアルタイムで計算するという問題に直面しています。
最初に、Matlab コーダーを使用して、フレネル式の quadgk-integrator 用に自動生成された C コードを取得しようとしました。これは基本的に、私のテストシナリオでうまく機能します。唯一の問題は、実行速度が非常に遅いことです (Matlab および自動生成コードで)。
もう 1 つのオプションは、サンプル ポイントを直線で結ぶ単位クロソイドのデータ テーブルを補間することでした (線形補間)。曲率のわずかな変化 (クロソイドに沿った小さなステップ) だけで、結果が明らかに線に劣化していることがわかった後、私はあきらめました。驚いた...
円は別の式を使用してプロットされる可能性があることは知っていますが、実際のシナリオでは曲率の小さな変化に遭遇することが多く、見出し 0° と 360° の間の 30k のサンプリング ポイントでは、私の問題に対して十分な角度分解能が得られませんでした。
次に、R = inf ポイントの周りでテイラー近似を試みました。これは、必要なすべての場所で大きな曲率が得られることを期待しています。多項式がすぐに不安定になるため (おそらく、倍精度 fp 計算の数値の不正確さが原因で)、4 項 (15 乗) を超える項を使用できないことにすぐに気付きました。したがって、t 値が大きいと、明らかに精度が急速に低下します。そして、「大きな t 値」とは、曲率がゼロの点に対して 90° を超える曲線を表すクロソイド上のすべての点のことです。
たとえば、R=150m から R=125m までの道路を 90° 曲がりながら評価する場合、有効な近似の範囲外になります。代わりに、204.5° ~ 294.5° の範囲にいますが、テイラー限界は単位クロソイドの約 90° になります。
私は今、ランダムに物事を試してみました。つまり、そのトピックについて見つけた何十もの論文に時間を費やすことができるということです. または、上記の方法のいくつかを改善または組み合わせることもできます。おそらく、Matlab には、Coder と互換性があり、十分に高速な統合関数が存在することさえあります。
この問題は非常に基本的なものであり、私にはそれほど問題を解決する必要はないと感じています。何か提案はありますか?