【问题标题】:Getting the boundary of a Bezier curve获取贝塞尔曲线的边界
【发布时间】:2017-06-25 22:18:05
【问题描述】:

我有点列表和控制点列表来绘制贝塞尔曲线。 请告诉我如何计算贝塞尔曲线的边界矩形。

var pointsList = [CGPoint(34, 23), ... , CGPoint(23, 85)]
var controlPoints = [CGPoint(45, 34), ..., CGPoint(55, 99)]

【问题讨论】:

    标签: math language-agnostic bezier curve boundary


    【解决方案1】:

    通常不是一个真正的难题,在http://pomax.github.io/bezierinfo/#boundingbox 上进行了介绍:

    1. Compute the x and y derivatives超级简单
    2. Find all roots (derivative=0) 对于这两个导数,我们将它们称为集合 r{x} 和 r{y},然后
    3. 为这些根计算相应的值集 bezier{x} 和 bezier{y}。那么,
    4. 您的边界框的角由这些集合中的最小值和最大值最小值/最大值定义。

    在此,如果您使用高阶贝塞尔曲线,则只有第 2 步可能会有点棘手。一旦你的曲线由四个以上的点组成,你就不能使用符号数学来找到根,而且通过导数曲线并查看结果坐标的值足够接近零以将它们视为近似值要容易得多根。

    您的图形看起来只是一系列连接的三次贝塞尔曲线,在这种情况下,求根很容易(导数将是二次曲线,您将学习如何使用 the quadratic equation 为高中生求根) ,并且盒子过程只是“计算每个三次曲线部分的边界框,当你完成后,full 边界框只是使用所有单个框的最小/最大值”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多