Math 回旋线的参数化函数

Math 回旋线的参数化函数,math,3d,geometry,computational-geometry,Math,3d,Geometry,Computational Geometry,我正在为基于格式的道路网络渲染器编码 此格式的道路曲线有四种类型: 部分 圆弧 保利线 克洛托弧 最后一个我有问题 与Euler螺旋和Cornu螺旋相同。在ROADO中,圆弧由三个参数给出: 开始曲率 端部曲率 长度 对于圆弧三角剖分,我需要一个类似foo(t)的函数,它返回t=0..length的(x,y)坐标。我为圆弧创建了类似的方法,没有问题,但我不能为clotho圆弧创建类似的方法 部分问题在于,我不完全理解如何在标准回旋线公式中应用开始曲率和结束曲率参数 例如,示例RoadXM

我正在为基于格式的道路网络渲染器编码

此格式的道路曲线有四种类型:

  • 部分
  • 圆弧
  • 保利线
  • 克洛托弧
最后一个我有问题

与Euler螺旋和Cornu螺旋相同。在ROADO中,圆弧由三个参数给出:

  • 开始曲率
  • 端部曲率
  • 长度
对于圆弧三角剖分,我需要一个类似foo(t)的函数,它返回t=0..length的(x,y)坐标。我为圆弧创建了类似的方法,没有问题,但我不能为clotho圆弧创建类似的方法

部分问题在于,我不完全理解如何在标准回旋线公式中应用开始曲率和结束曲率参数

例如,示例RoadXML road。

这是红色椭圆中的clotho曲线项。它的参数是:

  • 开始曲率=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)分,这是非常直接的


我的错在哪里?我做错了什么?

看报纸。通常,回旋面由菲涅耳积分定义。结果是回旋线
C(t)
具有弧长
t
。所以一开始,一般曲线的公式是用弧长表示的。一条特定的曲线只是普通螺旋的一部分,从起点曲率到终点曲率。对于一般情况,您必须进行旋转和平移。

让我们看看。您的数据是:

start curvature = 0,                straight line, R=INF
end curvature = -0.0165407,         circular arc, R_c = 1/k_c = 60.4569335
length = 45.185.                    distance along clothoid, s_c = 45.185
根据,

(注意:我在这里称
a
为WP文章所称
a
的倒数)。那么

其中
C(t)
S(t)

所以这就是缩放的方式。不仅是
t=s
,而且
t=s/a
=sqrt(θ)
。这里,对于终点,
t_c=sqrt(k_c s_c/2)=sqrt(0.0165407*45.185/2)=0.6113066

现在,
{73.915445sqrt[pi/2]湿壁画[0.6113066/Sqrt[pi/2]],73.915445sqrt[pi/2]湿壁画[0.6113066/Sqrt[pi/2]}=
{44.5581,5.57259}
。(显然,Mathematica使用a。)

用你的函数测试它,
=a*(s/a)
=45.185
=5.628481
/3
<6,你没有错误

所以你看,仅仅使用菲涅耳积分的泰勒级数表示的第一项是不够的-到目前为止。您必须使用更多,并且仅在达到所需精度时停止(即,当最后计算的项小于预设的精度值时)


请注意,如果您仅为一次性缩放回旋线计算实现常规菲涅耳积分函数,当您将结果乘以
a
(对于公路和铁路,通常为102…103)时,您将失去额外的精度

谢谢你的链接,brainjam。但我的主要问题是实现RoadXML-clotho参数。我将示例添加到我的帖子“旋转和平移”。。。和缩放。你最好计算它,这样缩放就不会破坏所需的精度。不幸的是,链接不再工作。可能是这个:顺便说一句,你知道
k=1/r
,对吗?在45.2米范围内达到60.6米的曲率半径远非笔直威尔·奈斯,是的,我知道,曲率=1/半径。我在问题中加入了我的方程式。
R s = const = R_c s_c                   ( s ~ k = 1/R by definition of clothoid )
d(s) = R d(theta)
d(theta) = k d(s)
d(theta) / d(s) = 1 / R = k = s / R_c s_c  

theta = s^2 / 2 R_c s_c = (s/a)^2 = s / 2 R = k s / 2 
                               where ___________________
                                     a = sqrt(2 R_c s_c)       (... = 73.915445 )
                                     ~~~~~~~~~~~~~~~~~~~
    and so  theta_c = k_c s_c / 2      (... = 0.37369576475 = 21.411190 degrees )
                                                     ( not so flat after all !! )
d(x) = d(s) cos(theta)
d(y) = d(s) sin(theta)

x = INT[s=0..s] cos(theta) d(s) 
  = INT[s=0..s] cos((s/a)^2) a d(s/a) 
  = a INT[u=0..(s/a)] cos(u^2) d(u)   = a C( s/a )

y = a INT[u=0..(s/a)] sin(u^2) d(u)   = a S( s/a )