计算Bezier AABB

时间:2011-03-27 09:14:32

标签: graphics bezier aabb

我想为二次曲线或贝塞尔曲线计算AABB(轴对齐边界框)。

我知道如何做到这一点的唯一方法是评估贝塞尔曲线上的大量点,然后使用这些点来计算AABB。

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

贝塞尔曲线上的大量资源,以及AABB http://pomax.github.io/bezierinfo/#boundingbox的工作示例 对于二次曲线,如果需要,也可以使用导数进行计算。

当封闭形式可用时,始终避免使用迭代方法。

答案 1 :(得分:1)

应该可以通过查找参数形式的曲线导数来寻找最小值和最大值。看看这篇文章:http://nishiohirokazu.blogspot.jp/2009/06/how-to-calculate-bezier-curves-bounding.html

答案 2 :(得分:0)

二次贝塞尔曲线由2个坐标函数组成 - x(t)和y(t)其中。

这些函数可能有最大值或最小值(x'(t)= 0和y'(t)= 0的点),这些点是aabb的边界点。

所以算法是:

  1. 想象一下x0,y0,x1,y1,x2,y2是已知的并且当x'(t)= 0和y&时计算值t(x0,x1,x2)和t(y0,y1,y2) #39;(t)= 0。
  2. 计算两个值并检查它们是否> = 0且< = 1.如果它们是评估二次贝塞尔曲线的点。
  3. 取第一点和最后一点。
  4. 现在你有4分(或者更少),用它们来计算AABB。
  5. 顺便说一下:

    t(x0,x1,x2)=(x0 - x1)/(x2 - 2 * x1 + x0)

    t(y0,y1,y2)=(y0 - y1)/(y2 - 2 * y1 + y0)

    您可以在此处找到完整代码:https://github.com/keyten/Graphics2D/blob/Delta/Core/Curve.Math.js#L295