我使用此算法计算二次贝塞尔曲线的长度: http://www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/
然而,我想要做的是计算贝塞尔曲线的长度,从0到t,其中0 <0。 t&lt; 1
有没有办法修改上面链接中使用的公式来获得贝塞尔曲线第一段的长度?
为了澄清,我不是在寻找q(0)和q(t)之间的距离,而是在这些点之间的弧长。
(我不希望使用自适应细分来使长度近似)
答案 0 :(得分:7)
由于我确信该变量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
答案 1 :(得分:1)
虽然可能有一个封闭的表单表达式,但这就是我要做的事情:
使用De-Casteljau's algorithm将bezier分割为0到t部分,并使用链接中的算法计算其长度。
答案 2 :(得分:1)
您只需要评估0到1之间但不在0到t之间的积分。如果您不参加数学运算,可以使用您选择的符号工具箱。例如:
http://integrals.wolfram.com/index.jsp?expr=Sqrt\[a*x*x%2Bb*x%2Bc\]&random=false
评估x = t和x = 0的结果并减去它们。