我正在编写基于RoadXML格式的道路网络渲染器。
这种格式的道路曲线有四种类型:
- 分割,
- 圆弧,
- 折线,
- 布道弧。
我对最后一个有问题。
Clothoid与 Euler 螺旋和 Cornu 螺旋相同。在 RoadXML 中,布料弧由三个参数给出:
- 开始曲率,
- 末端曲率,
- 长度。
对于弧三角测量,我需要一个像 foo(t) 这样的函数,它返回 t = 0..length 的 (x, y) 坐标。我为圆弧创建了类似的方法,没有问题,但我不能为圆弧做。
部分问题是我不完全了解如何在标准回旋曲线公式中应用开始和结束曲率参数。
例如,示例 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) 点,这是非常直的。
我的错误在哪里?我究竟做错了什么?