The following turns

Bezier curve, you can use three points to determine a smooth curve. In computer graphics there should be talk. is an important tool in the development of graphics.

The realization is a graph to do circular motion. However, it is not a simple keyframe animation, it is to calculate a lot of points, of course, or use the Keyframe animation, that is, using cakeyframeanimation. With Bezier support, you can assign a path reference to a cakeyframeanimation Bezier curve.

Drawing a circle with a Bezier curve is a special case, and my approach is to get 4 semi-circular curves with Bezier curves, which are the entire circle.

The following is the code for the animation section:

-(void) doanimation {

cakeyframeanimation *animation=[cakeyframeanimation animationwithkeypath:@ "position"];

animation.duration=10.5f;

animation.removedoncompletion = NO;

animation.fillmode = kcafillmodeforwards;

animation.repeatcount=huge_valf;//Repeat Forever

Animation.calculationmode = kcaanimationcubicpaced;

cgmutablepathref curvedpath = cgpathcreatemutable ();

cgpathmovetopoint (Curvedpath, NULL, 184);

4 + quadratic Bezier curves added

Cgpathaddquadcurvetopoint (Curvedpath, NULL, 312, 184, 312, 384);

Cgpathaddquadcurvetopoint (Curvedpath, NULL, 310, 584, 512, 584);

Cgpathaddquadcurvetopoint (Curvedpath, NULL, 712, 584, 712, 384);

Cgpathaddquadcurvetopoint (Curvedpath, NULL, 712, 184, 512, 184);

Animation.path=curvedpath;

[Flystarlayer addanimation:animation Forkey:nil];

}

**Bézier curve (** Bezier curve **)** is a mathematical curve applied to a two-dimensional graphical application. Curve definition: Start point, end point (also called Anchor Point), control point. By adjusting the control point, the shape of the Bezier curve changes. In 1962, **Pierre Bézier** , the French mathematician, first studied the method of the vector drawing curve and gave a detailed calculation formula, so the curve drawn by such a formula is named after his surname, called the Bezier curve.

In the following formula: B (t) is the coordinate of the point at t time;

P0 is the starting point, PN is the end point, Pi is the control point

**first-order Bezier curves (line segments):**

Meaning: A line segment described by a continuous point from P0 to P1

**quadratic Bezier curve (parabola):**

Principle: A continuous point Q0 from P0 to P1, describing a line segment.

A continuous point Q1 from P1 to P2 that describes a line segment.

A continuous point B (t) from Q0 to Q1 that describes a two-time Bezier curve.

Experience: P1-p0 is the tangent of the curve at P0.

**Sanche Besel curve:**

**General formula:**

**Gauche Besel curve:**

4-Step curve:

5-Step curve:

Http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/de-casteljau.html

Following the construction of a Bézier curve, the next important task is to find the point **C**(U) on the curve for a particular U. A simple-to-plug u into every basis function, compute the product's basis function and its corresponding cont Rol point, and finally add them together. While this works fine, it's not numerically stable (i.e., could introduce numerical errors during the course of Evaluatin G the Bernstein polynomials).

In what follows, we shall only write down the control point numbers. That is, the control points are ** xx ** for ** P ** 0, ** 01 ** for ** P ** 1, ..., ** 0i ** for ** P ** I, ..., ** 0n ** for ** P ** N. the ** 0 ** s in these numbers indicate the initial or the 0-th iteration. Later on, it'll be replaced with ** 1 **, ** 2 **, ** 3 ** And so on.

The fundamental concept of de Casteljau ' s algorithm is to choose a point **C** on line segment **AB** such that **C** divides the line segment **AB** in a ratio of u:1-u (i.e., the ratio of the distance between **a** D **C** and the distance between **A** and **B** is u). Let us find a by-determine the point **C**.

The vector from ** A ** to ** B ** is ** b-a **. Since u is a ratio in the range of 0 and 1, point ** C ** is located at u (** B- A **). Taking the position of ** a ** into consideration, point ** C ** is ** a ** + u (** b-a **) = (1- u) ** A ** + u ** B **. Therefore, given A u, (1- u) ** a ** + u ** B ** is the point ** C ** between ** A ** and ** B ** that divides ** AB ** in a ratio of u:1-u.

The idea of de Casteljau ' s algorithm goes as follows. Suppose we want to find **C**(u), where u are in [0,1]. Starting with the first polyline, **00-01-02-03...-0n**, use the above formula to find a point **1i** on the leg (i.e. line segment) from **0i** to**0 (i+1),** divides the line segment **0i** and **0 (i+1)** in a Ratio of u:1-u. In this, we'll obtain n points, one, **ten**, ...., **1 (n-1)**. They define a new polyline of n-1 legs.

In the Above, u is 0.4. , ** ** is in the leg of ** xx ** &NBSP;AND&NBSP, ** **, , ** one ** is in the leg of ** ** and ** **, ..., and ** and ** is in the leg of ** all ** ** **. All of these new points is in blue.

The new points is numbered as **1i**S. Apply the procedure to this new polyline and we shall get a second polyline of n-1 points , **2 (n-2)** and n-2 legs. Starting with this polyline, we can construct a third one of the n-2 points, **3 (n-3)** an D n-3 Legs. Repeating this process n times yields a single point **n0**. De Casteljau proved that's the point **C**(U) on the curve, which corresponds to U.

Let us continue and the above figure. Let** -**Being the point in the leg of**Ten**and** One**That's divides the line segment**Ten**and** One**In a ratio of u:1-u. Similarly, choose** +**On the leg of** One**and** A**,** A**On the leg of** A**and** -**, and** at**On the leg of** -**and** -**. This gives a third polyline defined by** -**,** +**,** A**and** at**. This third polyline have 4 points and 3 legs. Keep doing this and we shall obtain a new polyline of three points** -**,** to**and** +**. From this fourth polyline, we have the fifth one of the points** +**and** A**. Do it once more, and we have** -**, the point**C**(0.4) on the curve.

This is the geometric interpretation of de Casteljau's algorithm, one of the most elegant result in curve design.

**Actual Computation** Given the above geometric interpretation of de Casteljau ' s algorithm, we shall present a computation method, which is show N in the following.

First, all given control points was arranged into a column, which was the left-most one in the. For each pair of adjacent control points, draw a south-east bound arrow and a north-east bound arrow, and write down a new Point at the intersection of the adjacent arrows. For example, if the-adjacent points is **ij** and **i (j+1)**, the new point is**(i+1) J**. The South-east (resp., north-east) bound arrow means multiplying 1-u (resp., u) to the point at its tail, **ij**(re Sp., **I (j+1)**), and the new point is the sum.

Thus, from the initial column, column ** 0 **, we compute column ** 1 **; from column ** 1 ** we obtain column ** 2 ** and so on. Eventually, Aftern applications we shall arrive at a single point ** n0 ** and On the curve. The following algorithm summarizes we have discussed. It takes an array ** P ** of n+1 points and a u in the range of 0 and 1, and returns a Point on the Bézier curve ** C ** (u).

** Q ** [i]:= ** p ** [i];//save input

** Q ** [i]: = (1- u) ** q ** [i] + u ** q ** [i + 1]; ** for ** i := 0 , ** to ** n-k , ** do ** ** Input: ** array ** P ** [0:n] of n+1 points and real number u in [0,1] &NBSP

** Output: ** point on curve, ** C ** (u)

** working: ** point array ** Q ** [0:n]

** for ** i := 0 ** to ** n , ** do **

for k := 1 , ** to ** n ** do **

Return q [0];

**A Recurrence Relation** The above computation can be expressed recursively. Initially, let **P** 0,j is **p** J for j = 0, 1, ..., N. That is, **P** 0,j are the j-th entry on column 0. The computation of Entry J on column I is the following:

More precisely, entry **p**i,j is the sum of (1-u)**P**i-1,j (upper-left corner) and u**P**i-1,j+1 (lower-l EFT corner). The final result (i.e, the point in the curve) is **P**n,0. Based on the "idea", one may immediately come up with the following recursive procedure:

**return P**0,j

**return** (1-u) * **Decasteljau** (I-1, j) + U * **decasteljau** (i-1, J + 1) **if** i = 0 Then

else **function** **decasteljau**(i,j)

**Begin**

End

This procedure looks simple and short; However, it is extremely inefficient. Here's why. We start with a call to**Decasteljau**(n,0) for computing **P**n,0. The **else** part splits this call into the and the calls, **Decasteljau**(n-1,0) for computing **P**n-1 , 0 and **Decasteljau**(n-1,1) for computing **P**n-1,1.

Consider the call to**Decasteljau**(n-1,0). It splits into the more calls,**Decasteljau**(n-2,0) for computing**P**n-2,0 and**Decasteljau**(n-2,1) for computing**P**n-2,1. The call to**Decasteljau**(n-1,1) splits into and calls,**Decasteljau**(n-2,1) for computing**P**n-2,1 and**Decasteljau**(n-2,2) for computing**P**n-2,2. Thus,**Decasteljau**(n-2,1) is called twice. If We keep expanding these function calls, we should discover that almost all function calls for computing**P**I,j is repeated, not once but many times. What is the This? In fact, the above computation scheme was identical to the following-in-A-Z of computing then-th Fibonacci number:**return**1

**return****Fibonacci**(n-1) +**Fibonacci**(n-2)**if**n = 0**or**n = 1**Then **

else **function****Fibonacci**(n)

**Beginend**This program takes a exponential number of function calls (an exercise) to compute**Fibonacci**(n). Therefore, the above recursive version of De Casteljau ' s algorithm is** not**Suitable for direct implementation, although it looks-simple and elegant!

An **interesting observation**

The triangular computation scheme of de Casteljau ' s algorithm offers an interesting observation. Take a look at the following computation in a Bézier curve of degree 7 defined by 8 control points **xx**, **01, ..., the. Let us consider a set of consecutive points on the same column as the control points of a Bézier curve. Then, given a u in [0,1], how does we compute the corresponding point to this Bézier curve? If de Casteljau ' s algorithm is applied-these control points, the point on the curve is the opposite vertex of the Equil Ateral ' s base formed by the selected points!**

For example, if the selected points are ** **, ** **, ** 04 ** and ** **, the point on the curve defined by these four control points that corresponds to u is ** **. See the Blue Triangle. If the selected points are ** one **, ** ** and ** + **, The point on the curve is ** to **. See the Yellow triangle. If the selected points are ** **, ** to **, ** + **, ** ** and ** the point is on the curve is **** + **.

By the same reason, the "the point" on the Bézier curve defined by control points. It is also the-the-curve defined by , **Wuyi** and curve defined by **40< /c6>, A. In general, if we select a point and draw an equilateral as shown above, the base of this equilateral consists of the Cont Rol points from which, the selected point is computed.**

Reference: http://my.oschina.net/u/223340/blog/326947

Http://blog.chinaunix.net/uid-20622737-id-3161025.html

Http://www.cnblogs.com/jay-dong/archive/2012/09/26/2704188.html

http://blog.csdn.net/eclipsexys/article/details/51956908