Daniel Sapoundjiev on
  Bounding box of cubic bezier curve

Bounding box of cubic bezier curve

21 September 2016

Background

It is very commonly used approach to itterate through the points of the bezier
curve and this way to determine the most left, right, top, bottom possitions.
This approach is slow and not so accurate.

Basics

One direction bezier

Calculations of the points can be performed by simple calculations
A1 = A + (B-A)t = A(1-t) + Bt
B1 = B + (C-B)t = B(1-t) + BC
C1 = C + (D-C)t = C(1-t) + Dt

K = A1 + (B1-A1)t = A1(1-t) + B1t
L = B1 + (C1-B1)t = B1(1-t) + C1t

M = K + (L-K)t = K(1-t) + Lt

M = (A1(1-t) + B1t)(1-t) + (B1(1-t) + C1t)t =
A1(1-t)^2 + B1(1-t)t + B1(1-t)t + C1t^2 =
A1(1-t)^2 + 2B1(1-t)t + C1t^2

(1-t)^3 A vs t^3 B

How the first coordinate relates to the last one? As we know t starts from 0 and ends with 1. As we look on this equation (1-t)^3 a - t^3 b we will see that it is a line. So if A is lower than B then A will be lower point of the curve and B will be the biggest value. When B is lower then we have the opposite situation. This relates to Left and Right, also to Top and Bottom values. If we use the X coordinates of the points then we have the Left and Right values. If we use the Y coordinates then we have the Top and Bottom values

But what happens with 3.(1-t)^2.t.A and 3.(1-t).t^2.B

to be continued

Left-right and Top-Bottom

Left and right are determined by the X coordinates. Top and bottom are determined by the Y coordinates.
This can be done separately. Algorithm is the same for both.

Possible slope combinations

Possible slope combinations of the edges between the points.
They are 2^3 = 8. 2 states in 3 positions
Equal values are also posible, however, equals will be part of the other cases.
1. -> -> -> all in same direction
2. <- <- <- all in same direction
3. -> <- -> ends in same direction
4. <- -> <- ends in same direction
5. -> -> <- ends in opposite directions
6. -> <- <- ends in opposite directions
7. <- -> -> ends in opposite directions
8. <- <- -> ends in opposite directions

Start and end

Both ends are equal. It doesn't matter which point we will choose for start and which for end. At the end we have the same bounding box.
If we have all edges in same direction -> -> -> it will be the same as <- <- <- if we choose other end for start.
This way we have pairs that are the same but looked from different end.
1. -> -> -> all in same direction
2. <- <- <- all in same direction

3. -> <- -> ends in same direction
4. <- -> <- ends in same direction

5. -> -> <- ends in opposite directions
6. -> <- <- ends in opposite directions

7. <- -> -> ends in opposite directions
8. <- <- -> ends in opposite directions

Control points between end points

One direction bezier

When control points lay between the end points, end points will define the bounding box.
No other point can lay more left or right than them.
Covered combinations
1. -> -> ->
2. <- <- <-
Partial covered combinations
3. -> <- ->
4. <- -> <-

Opposite ends

In 4 combinations we have end eges with opposite directions
5. -> -> <- ends in opposite directions
6. -> <- <- ends in opposite directions
7. <- -> -> ends in opposite directions
8. <- <- -> ends in opposite directions
In these cases we have:
- if first edge is right oriented then we have first or last point define left boundary of the bounding box. The right boundary needs more calculations.
- if first edge is left oriented then we have first or last point as right boundary of the bounding box. The left boundary needs more calculations.

Opposite edges

Opposite edges

In 6 of the slope combinations we have edges that have opposite direction slopes
a/b = b/c <=> b^2 = ac
a = AB - b
c = BC - b
replace a and c
b^2 = (AB - b)(BC - b)
b^2 = AB*BC -ABb - BCb + b^2
b(AB + BC) = AB*BC
b = AB*BC/(AB + BC)
D = B - (B-A)(B-C)/(B-A+B-C)

Back to main menu