Bézier spline

From Wikipedia, the free encyclopedia

In the mathematical field of numerical analysis and in computer graphics, a Bézier spline is a spline curve where each polynomial of the spline is in Bézier form.

In other words, a Bézier spline is simply a series of Bézier curves joined end to end where the last point of one curve coincides with the starting point of the next curve. Usually cubic Bézier curves are used, and additional control points (called handles) are added to define the shape of each curve. A Bézier spline is similar to a polyline in that it connects a series of points, but whereas in polylines the points are connected by straight lines, in a Bézier spline the points are connected by Bézier curves.

Beziergon - The red beziergon passes through the blue vertices, the green points are control points that determine the shape of the connecting Bézier curves

In geometry, a beziergon (also called bezigon or polybezier) is a closed path composed of Bézier curves. It is similar to a polygon in that it connects a set of vertices by lines, but whereas in polygons the vertices are connected by straight lines, in a beziergon the vertices are connected by Bézier curves. [1][2][3]

Perhaps the most common use of Bézier splines is to describe the outline of each letter in a PostScript or PDF file. Such outlines are composed of one beziergon for open letters, or multiple beziergons for closed letters.

Modern vector graphics and computer font systems like PostScript, Asymptote, Metafont, OpenType, and SVG use Bézier splines composed of cubic Bézier curves (3rd order curves) for drawing curved shapes.

TrueType fonts use Bézier splines composed of quadratic Bézier curves (2nd order curves) -- little pieces of parabolas.[4]

A few early digital fonts use polygonal chains—each letter form is composed of what are effectively 1st order Bézier curves—straight lines.

To describe a typical type design as a computer font to any given accuracy, 3rd order splines (a series of 3rd order curves) require less data than 2nd order splines; and 2nd order splines in turn require less data than a series of straight lines.[4] This is true even though any one straight line segment requires less data than any one segment of a parabola; and that parabolic segment in turn requires less data than any one segment of a 3rd order curve.

Definition

Sinc function approximated using Bézier splines

Given a spline S of degree n with k knots xi we can write the spline as a Bézier spline as:[citation needed] S(x):=\left\{{\begin{matrix}S_{0}(x):=&\sum _{{\nu =0}}^{{n}}\beta _{{\nu ,0}}b_{{\nu ,n}}(x)&x\in [x_{0},x_{1}]\\S_{1}(x):=&\sum _{{\nu =0}}^{{n}}\beta _{{\nu ,1}}b_{{\nu ,n}}(x-x_{1})&x\in [x_{1},x_{2}]\\\vdots &\vdots \\S_{{k-2}}(x):=&\sum _{{\nu =0}}^{{n}}\beta _{{\nu ,k-2}}b_{{\nu ,n}}(x-x_{{k-2}})&x\in [x_{{k-2}},x_{{k-1}}]\\\end{matrix}}\right.

where the b_{{\nu ,n}}(x) are the Bernstein basis polynomials of degree n and the \beta _{{\nu ,i}} are the (unique) coefficients according to their linear combination for S_{i}.

Approximating circular arcs

In case circular arc primitives are not supported in a particular environment, they may be approximated by Bézier curves.[5] Commonly, four cubic segments are used to approximate a circle. It is desirable to find the length {\mathbf  {k}} of control points which result in the least approximation error.

Using four curves

Considering only the 90-degree unit-circular arc in the first quadrant, we define the endpoints {\mathbf  {A}} and {\mathbf  {B}} with control points {\mathbf  {A'}} and {\mathbf  {B'}}, respectively, as:

{\begin{aligned}{\mathbf  {A}}&=[0,1]\\{\mathbf  {A'}}&=[{\mathbf  {k}},1]\\{\mathbf  {B'}}&=[1,{\mathbf  {k}}]\\{\mathbf  {B}}&=[1,0]\\\end{aligned}}

From the definition of the cubic Bézier curve, we have:

{\mathbf  {C}}(t)=(1-t)^{3}{\mathbf  {A}}+3(1-t)^{2}t{\mathbf  {A'}}+3(1-t)t^{2}{\mathbf  {B'}}+t^{3}{\mathbf  {B}}

With the point {\mathbf  {C}}(t=0.5) as the midpoint of the arc, we may write the following two equations:

{\begin{aligned}{\mathbf  {C}}&={\frac  {1}{8}}{\mathbf  {A}}+{\frac  {3}{8}}{\mathbf  {A'}}+{\frac  {3}{8}}{\mathbf  {B'}}+{\frac  {1}{8}}{\mathbf  {B}}\\{\mathbf  {C}}&={\sqrt  {1/2}}={\sqrt  {2}}/2\end{aligned}}

Solving these equations for the x-coordinate (and identically for the y-coordinate) yields:

{\frac  {0}{8}}{\mathbf  +}{\frac  {3}{8}}{\mathbf  {k}}+{\frac  {3}{8}}+{\frac  {1}{8}}={\sqrt  {2}}/2
{\mathbf  {k}}={\frac  {4}{3}}({\sqrt  {2}}-1)\approx 0.5522847498

General case

We may compose a circle of radius R from an arbitrary number of cubic Bézier curves.[6] Let the arc start at point {\mathbf  {A}} and end at point {\mathbf  {B}}, placed at equal distances above and below the x-axis, spanning an arc of angle \theta =2\phi :

{\begin{aligned}{\mathbf  {A}}_{x}&=R\cos(\phi )\\{\mathbf  {A}}_{y}&=R\sin(\phi )\\{\mathbf  {B}}_{x}&={\mathbf  {A}}_{x}\\{\mathbf  {B}}_{y}&=-{\mathbf  {A}}_{y}\end{aligned}}

The control points may be written as:[7]

{\begin{aligned}{\mathbf  {A'}}_{x}&={\frac  {4R-{\mathbf  {A}}_{x}}{3}}\\{\mathbf  {A'}}_{y}&={\frac  {(R-{\mathbf  {A}}_{x})(3R-{\mathbf  {A}}_{x})}{3{\mathbf  {A}}_{y}}}\\{\mathbf  {B'}}_{x}&={\mathbf  {A'}}_{x}\\{\mathbf  {B'}}_{y}&=-{\mathbf  {A'}}_{y}\end{aligned}}

Examples

References

  1. Microsoft polybezier API
  2. Papyrus beziergon API reference
  3. "A better box of crayons". InfoWorld. 1991.
  4. 4.0 4.1 Don Lancaster
  5. Stanislav, G. Adam. "Drawing a circle with Bézier Curves". Retrieved 10 April 2010. 
  6. Riškus, Aleksas (October 2006). "APPROXIMATION OF A CUBIC BEZIER CURVE BY CIRCULAR ARCS AND VICE VERSA". INFORMATION TECHNOLOGY AND CONTROL (Department of Multimedia Engineering, Kaunas University of Technology) 35 (4): 371–378. ISSN 1392-124X. 
  7. DeVeneza, Richard. "Drawing a circle with Bézier Curves". Retrieved 10 April 2010. 
  • Koehler; Dr. Ralph. 2D/3D Graphics and Splines with Source Code. ISBN 0-7596-1187-4. 
This article is issued from Wikipedia. The text is available under the Creative Commons Attribution/Share Alike; additional terms may apply for the media files.