我使用这个算法来计算二次贝塞尔曲线的长度:http: //www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/
但是,我想做的是计算从 0 到 t 的贝塞尔曲线的长度,其中 0 < t < 1
有没有办法修改上面链接中使用的公式来获得贝塞尔曲线第一段的长度?
澄清一下,我不是在寻找 q(0) 和 q(t) 之间的距离,而是在这些点之间的弧的长度。
(我不希望使用自适应细分来近似长度)
我使用这个算法来计算二次贝塞尔曲线的长度:http: //www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/
但是,我想做的是计算从 0 到 t 的贝塞尔曲线的长度,其中 0 < t < 1
有没有办法修改上面链接中使用的公式来获得贝塞尔曲线第一段的长度?
澄清一下,我不是在寻找 q(0) 和 q(t) 之间的距离,而是在这些点之间的弧的长度。
(我不希望使用自适应细分来近似长度)
由于我确信对于该可变情况会存在类似的表单解决方案t
- 我扩展了链接中给出的解决方案。
从链接中的方程式开始:
我们可以写成
哪里b = B/(2A)
和c = C/A
。
然后转换u = t + b
我们得到
在哪里k = c - b^2
现在我们可以使用链接中的积分标识来获得:
因此,总而言之,所需的步骤是:
b = B/(2A)
和c = C/A
u = t + b
和k = c -b^2
虽然可能有一个封闭的形式表达,这就是我要做的:
使用De-Casteljau 算法将贝塞尔曲线拆分为 0 到 t 部分,并使用链接中的算法计算其长度。
您只需要评估积分,而不是在 0 和 1 之间,而是在 0 和 t 之间。如果你不喜欢数学,你可以使用你选择的符号工具箱来做到这一点。例如:
http://integrals.wolfram.com/index.jsp?expr=Sqrt\[a*x*x%2Bb*x%2Bc\]&random=false
计算 x = t 和 x = 0 的结果并减去它们。