三次贝塞尔曲线长度的解析解
看似不存在,但并不代表
编写廉价的解决方案并不存在。我所说的“便宜”是指 50-100 ns(或更短)范围内的时间。
有人知道类似的事情吗?可能分为两类:
1) 错误较少,如 1%,但代码速度较慢。
2) 错误更多,例如 20%,但速度更快?
我通过谷歌扫描了一下,但没有
找到任何看起来不错的解决方案。只有类似 N 条线段上的除法之类的东西
并对 N sqrt 求和 - 太慢而无法提高精度,
对于 2 或 3 个片段来说可能太不准确。
有更好的吗?
另一种选择是将弧长估计为弦和控制网之间的平均值。在实践中:
Bezier bezier = Bezier (p0, p1, p2, p3);
chord = (p3-p0).Length;
cont_net = (p0 - p1).Length + (p2 - p1).Length + (p3 - p2).Length;
app_arc_length = (cont_net + chord) / 2;
然后,您可以递归地将样条线段分成两段,并计算直到收敛的弧长。我自己测试了一下,它实际上收敛得很快。我从这里得到了这个想法forum https://www.opengl.org/discussion_boards/showthread.php/172373-3D-Cubic-Bezier-Segment-Length.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)