如果我有一个特定长度的Catmull-Rom 样条线,我如何计算它在特定距离处的位置?通常,要计算 catmull rom 样条线中的点,您需要输入 0 到 1 之间的值以通过比例获取其位置,我该如何计算距离?例如,如果我的样条线长 30 个单位,我怎样才能获得它在距离 8 处的位置?
我问的原因是因为 catmull rom 样条线在 [0,1] 域中给出点并不能保证它会给你在样条线中那个距离处的点,例如,如果我在 catmull rom 样条线中输入 0.5长度 30 并不意味着我会得到距离样条线 15 处的位置,除非样条线本身实际上是一条直线。
通常的方法是存储每个线段的长度,然后通过 epsilon 值增加 t 来找出线段的部分长度,并计算两点之间的线性距离,直到找到答案。显然,epsilon 越小,得到的结果就越好,但它给出的结果却出奇的好。我使用这种方法沿着catmul-rom以恒定速度移动,你看不到它加速和减速……它确实以恒定速度移动。显然,根据您的分段的紧密程度,您的 epsilon 值将需要更改,但一般来说,您可以选择一个“足够好”的 epsilon,一切都会好起来的。
非迭代地找到答案是非常昂贵的(我不久前已经看到了推导过程,但它并不漂亮;))。你必须有一个很小的 epsilon 值才能获得更差的性能......