RoadXML形式に基づく道路ネットワーク用のレンダラーをコーディングしています。
この形式の道路曲線には、次の 4 つのタイプがあります。
- セグメント、
- 円弧、
- ポリライン、
- クロスアーク。
そして、私は最後のものに問題があります。
クロソイドは、オイラー螺旋やコルヌ螺旋と同じです。RoadXML では、クロス アークは次の 3 つのパラメータで指定されます。
- 開始曲率、
- 端の曲率、
- 長さ。
円弧三角形分割には、t = 0..length の (x, y) 座標を返す foo(t) のような関数が必要です。サークル アークの場合は問題なく同様の方法を作成しましたが、クロス アークの場合は作成できません。
問題の一部は、標準のクロソイド式で開始曲率パラメーターと終了曲率パラメーターを適用する方法を完全に理解していないことです。
たとえば、RoadXML 道路のサンプルです。 RoadXML サンプル http://img560.imageshack.us/img560/8172/bigroandabout.png
赤い楕円のクロソカーブアイテムです。パラメータです:
- 開始曲率 = 0、
- 終了曲率 = -0.0165407、
- 長さ = 45.185。
0 から -0.0165 までのクロソイド曲率は非常に直線的であるため、これらのパラメーターを実装する方法がわかりません。
この関数のコード (C++、C#、Java、Python、または疑似コード)、または私がコーディングできる式だけを教えていただければ幸いです。
これが私の方程式です:
x(t) ≈ t,
y(t) ≈ (t^3) / 6,
where length = t = s = curvature.
x(-0.0165) = -0.0165,
y(-0.0165) = -7.48688E-07.
Clotho length = 0.0165,
Source length = 45.185.
スケーリングされた座標:
x'(l) = x / clotho_length * source_length = 45.185,
y'(l) = y / clotho_length * source_length = 5.58149E-07 ≈ 0.
x'(0) = 0,
y'(0) = 0.
したがって、(0, 0)...(45, 0) ポイントが得られます。これは非常に単純です。
私の間違いはどこですか?私は何を間違っていますか?