立方贝塞尔曲线是否完全由其控制点的边界框包含?

时间:2012-01-14 02:58:16

标签: c++ math geometry

可能非常简单的问题(我只是想确保我是对的)。标题不是100%正确,但下面是我需要的:

我想计算三次贝塞尔曲线的边界框(矩形)。我知道包含曲线控制点的矩形不是字面上的边界框,它最可能更大,但我想确保它不能更小,也就是说,它总是包含曲线。

我有多个连续的三次贝塞尔曲线定义的样条曲线,我希望有它的边界框,或者最接近它的边界(我不是用于计算它的复杂公式,但是如果有的话是一种不太复杂的编码方式,我很高兴知道)。

澄清:通过"矩形包含曲线的控制点"我的意思是像这样计算的矩形:我将控制点的最小X和最小Y坐标作为矩形的左上角,控制点的最大X和最大Y坐标作为矩形的右下角。 (Y轴从上到下)。然后我想确保曲线肯定位于这个矩形内。

希望你理解我的意思:)。

3 个答案:

答案 0 :(得分:8)

wikipedia

  

Bézier曲线广泛用于计算机图形学中以模拟平滑曲线。由于曲线完全包含在其控制点的凸包中,

是的。

答案 1 :(得分:6)

是的,这是一个安全的假设(忽略任何精确问题)。

度 - n 贝塞尔曲线(我们称之为 A )可以表示为两度的线性插值 - ( n - 1)贝塞尔曲线(让我们称它们为 B C )。如果 B C 在边界框内,那么显然是 A 。但是你可以递归地应用它; B C 都可以表示为两度 - ( n -2)曲线的线性插值,依此类推。基本情况是当你递归到1度曲线时,这只是控制点本身的线性插值。

答案 2 :(得分:0)

简答:是的。

对于具有控制点B0,B1,B2和B3的三次Bézier曲线,沿曲线B(t)的每个点由下式计算:

B0*(1-t)^3 + B1*3*(1-t)^2*t + B2*3*(1-t)*t^2 + B3*t^3

重要的是,如果我们查看系数,它们都大于或等于0,它们的总和是

(1-t)^3 + 3*(1-t)^2*t + 3*(1-t)*t^2 + t^3 = 1

在数学中,这被称为凸组合。 Bézier曲线上的每个点都是控制点的凸组合。所有凸组合的集合称为凸包,因此曲线由控制点的凸包边界限定。凸包不包含高于最高控制点的任何东西,更左边的最左控制点,等等。找到控制点的最小和最大x和y值将足以找到包含Bézier样条。

顺便说一下,对于所有Bézier曲线,控制点的凸组合点都是正确的,但是你只需关心这个问题的三次曲线。