7

How do I convert a segment of parabola to a cubic Bezier curve?

The parabola segment is given as a polynomial with two x values for the edges.

My target is to convert a quadratic piecewise polynomial to a Bezier path (a set of concatenated Bezier curves).

Yoav
  • 271
  • The title does not reflect the question. – lhf Mar 20 '13 at 19:36
  • Fixed that. Thanks. – Yoav Mar 20 '13 at 20:17
  • See http://en.wikipedia.org/wiki/Bézier_curve#Degree_elevation – lhf Mar 20 '13 at 20:58
  • See also http://www.ams.org/samplings/feature-column/fcarc-bezier – lhf Mar 20 '13 at 22:13
  • Just minor correction - I had submitted an edit but it was rejected for not being "substantive," and I don't have the rep to comment. To calculate the first control point the formula should be: $C=(\frac{x_1+x_2}{2},f(x_1)+f'(x_1)\cdot \frac{x_2-x_1}{2})$ Note the minor difference in computing the point's Y component, without which the formula results in an incorrect control point for segments of the parabola where $x1 \neq 0$. The conversion to a cubic Bezier works fine. – Roland Nov 19 '13 at 19:03

2 Answers2

9

You can do this in two steps, first convert the parabola segment to a quadratic Bezier curve (with a single control point), then convert it to a cubic Bezier curve (with two control points).

Let $f(x)=Ax^2+Bx+C$ be the parabola and let $x_1$ and $x_2$ be the edges of the segment on which the parabola is defined.

Then $P_1=(x_1,f(x_1))$ and $P_2=(x_2,f(x_2))$ are the Bezier curve start and end points and $C=(\frac{x_1+x_2}{2},f(x_1)+f'(x_1)\cdot \frac{x_2-x_1}{2})$ is the control point for the quadratic Bezier curve.

Now you can convert this quadratic Bezier curve to a cubic Bezier curve by define the two control points as: $C_1=\frac{2}{3}C+\frac{1}{3}P_1$ and $C_2=\frac{2}{3}C+\frac{1}{3}P_2$.

Yoav
  • 271
5

Let $f(x)=ax^2+bx+c$ be the parabola and let $[x_1, x_2]$ be the interval of the segment that you want to convert to cubic Bezier curve. The first step is to convert that segment into a quadratic Bezier curve as follows:

1) The start point is $P_1=(x_1,f(x_1))$ and the end point $P_2=(x_2,f(x_2))$.
2) The control point $C$ should be the intersection point of the tangent lines at $P_1$ and $P_2$. These two tangent lines can be found as

$y=(2ax_1+b)(x-x_1)+y_1$, and
$y=(2ax_2+b)(x-x_2)+y_2$

Solving for the intersection point of above two line equations result in $C=(C_x,C_y)$ as

$C_x=\frac{x_1+x_2}{2}$
$C_y=\frac{x_2-x_1}{2}(2ax_1+b)+f(x_1)$

Once you have the quadratic Bezier curve, the cubic Bezier curve control points can be found as $C_1=\frac13P_1+\frac23C$ and $C_2=\frac23C+\frac13P_2$

fang
  • 3,570