Рассчитать Безье AABB - PullRequest
       59

Рассчитать Безье AABB

4 голосов
/ 27 марта 2011

Я бы хотел рассчитать AABB (ограничивающий прямоугольник по оси) для квадратичной кривой или кривой Безье.

Единственный способ, которым я знаю, как это сделать, это оценить большое количество точек на кривой Безье, а затем используйте эти точки для расчета AABB.

Есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 23 июля 2015

Большой ресурс на кривых Безье и рабочий пример AABB http://pomax.github.io/bezierinfo/#boundingbox Для квадратичной кривой, если она вам нужна, также рассчитайте ее, используя производные.

Всегда избегайте итерационных методов, когда доступна закрытая форма.

1 голос
/ 27 марта 2011

Это должно быть возможно путем поиска минимума и максимума благодаря производной кривой в параметрической форме. взгляните на эту статью: http://nishiohirokazu.blogspot.jp/2009/06/how-to-calculate-bezier-curves-bounding.html

0 голосов
/ 10 ноября 2017

Квадратичная кривая Безье состоит из 2 координатных функций - x (t) и y (t), где.

Эти функции могут иметь максимум или минимум (точки, где x '(t) = 0 и y'(t) = 0) и эти точки являются граничными точками aabb.

Таким образом, алгоритм выглядит так:

  1. Представьте себе x0, y0, x1, y1, x2, y2известны и вычисляют значения t (x0, x1, x2) и t (y0, y1, y2), когда x '(t) = 0 и y' (t) = 0 соответственно.
  2. Рассчитать оба значенияи проверьте, являются ли они> = 0 и <= 1. Если они оценивают точки квадратичного Безье. </li>
  3. Возьмите первый и последний баллы.
  4. Теперь у вас есть 4 балла (или, может быть, меньше), используйте их для расчета 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

...