我想计算二次曲线或贝塞尔曲线的 AABB(轴对齐边界框)。
我知道如何做到这一点的唯一方法是评估贝塞尔曲线上的大量点,然后使用这些点来计算 AABB。
有没有更好的办法?
Bezier 曲线的重要资源,以及 AABB 的工作示例http://pomax.github.io/bezierinfo/#boundingbox 对于二次曲线,如果需要,也可以使用导数计算。
当封闭形式可用时,请始终避免使用迭代方法。
由于曲线的参数形式的导数,应该可以通过寻找最小值和最大值来实现。看看这篇文章: http: //nishiohirokazu.blogspot.jp/2009/06/how-to-calculate-bezier-curves-bounding.html
二次贝塞尔曲线由 2 个坐标函数 - x(t) 和 y(t) 组成。
这些函数可能有最大值或最小值(x'(t) = 0 和 y'(t) = 0 的点),这些点是 aabb 的边界点。
所以算法是:
顺便一提:
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