Bézier curves are a class of parametric curves defined using a set of control points, and a parameter t in [0,1]. The analytic parametric equation of a Bézier curve defined by a control polygon of n+1 points Pi i = 0,!,n is given through Bernstein polynomials € Bi n (t) as follows: C(t) = Bi n (t)Pi i= 0 nΣ Where Bi n (t) = n! i!(n − i)! (1− t)n−i t i is the ith Bernstein polynomial of degree n. Given a value of parameter t, the Bézier curve can be evaluated either using the above parametric equation or using the Decasteljau subdivision algorithm. The objective of this homework is to develop a tool for visualization and editing of Bézier curves of any degree n. A C++ class should be defined to encapsulate the data and all the functions necessary for easy manipulation of Bézier curves. A particular attention should be paid to the design of your application and to the graphic user interface that allows the activation of the desired functionality.

Recommended functionalities:

1. Appropriate data structures to store the curve properties (number of control points, set of control points, etc.)

2. A Menu to allow navigation through the application functionalities and select the function to launch.

3. Mouse control function: allows the definition of the control polygon, the selection and move of one control point into another position to enhance the curve design

4. A function BezPoint() to compute and return the point on the Bézier curve using the parametric equation.

5. A function CasteljauPoint() to compute and return a point on the Bézier curve using the Decasteljau algorithm.

6. A function CasteljauSubdivid() to compute and return the two sub-curves of a Bézier curve using the Decasteljau algorithm.

7. A function drawBez() to visualize a Bézier curve with (or without) its control polygon.

8. A function to edit the curve: use the mouse to select and move one control point into another position, then trace the resulting curve.