使用CoreGraphics查找二次贝塞尔曲线的最小值/最大值

uns*_*ene 7 iphone bezier core-graphics

我使用CoreGraphics绘制二次贝塞尔曲线,但想要计算曲线的最小值/最大值.我不是数学背景,所以这有点麻烦.有没有人有任何关于如何解决这个问题的文章或想法?

Naa*_*aff 5

对于二次贝塞尔曲线,这实际上非常简单。

定义你的三个控制点P0 = (x0,y0)P1 = (x1,y1)P2 = (x2,y2)。要找到中的极值x,请求解以下方程式:

t = (x0 - x1) / (x0 - 2*x1 + x2)
Run Code Online (Sandbox Code Playgroud)

如果为0 <= t <= 1,则在处评估曲线t并将位置存储为Px。对以下内容执行相同的操作y

t = (y0 - y1) / (y0 - 2*y1 + y2)
Run Code Online (Sandbox Code Playgroud)

同样,如果0 <= t <= 1在处评估曲线,t并将位置存储为Py。最后,查找包含轴对齐包围盒P0P2Px(如果找到)和Py(如果找到)。此边界框还将紧密约束2D二次Bezier曲线。