作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
三次贝塞尔曲线长度的解析解似乎不存在,但不代表编写便宜的解决方案是不存在的。我所说的便宜是指大约在 50-100 纳秒(或更短)的范围内。
有人知道吗?可能分为两类:
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得到了这个想法.
关于计算立方贝塞尔曲线长度的廉价方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438398/
我是一名优秀的程序员,十分优秀!