一个三次贝塞尔曲线是否完全包含在其控制点的边界框内?

3

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

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

我有由多个连续的立方贝塞尔曲线定义的样条,并且我想要它的边界框,或者最接近它的东西(我不懂得用复杂的公式来计算它,但如果有一些不太复杂的编码方式,我会很感激知道)。

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

希望你明白我的意思 :)

3个回答

8

根据维基百科的说法:

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

所以是的。


6
是的,这是一个安全的假设(忽略任何精度问题)。
度数为n的Bezier曲线(我们称之为A)可以表示为两个度数为(n-1)的Bezier曲线(我们称之为B和C)的线性插值。如果B和C在边界框内,那么A也显然在其中。但你可以递归地应用这一方法;B和C都可以表示为两个度数为(n-2)的曲线的线性插值,依此类推。基本情况是当你递归到度数为1的曲线时,它们只是控制点本身的线性插值。

0

简短回答:是的。

对于具有控制点B0、B1、B2和B3的三次贝塞尔曲线,沿着曲线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曲线都是正确的,但是对于这个问题,你只需要关心三次曲线。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接