2011-03-27 2 views
4

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

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

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

ответ

2

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

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

0

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

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

Таким образом, алгоритм:

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

Кстати:

т (х0, х1, х2) = (x0 - x1)/(x2 - 2 * x1 + х0)

т (у0, у1, у2) = (y0 - y1)/(y2 - 2 * y1 + y0)

Вы можете найти полный код здесь: https://github.com/keyten/Graphics2D/blob/Delta/Core/Curve.Math.js#L295

Смежные вопросы