Non Uniform Rational B-Spline is a mathematical model to represent the free form curves and surfaces in computer
graphics. It is mostly used in Computer Aided Design (CAD) and creating characters for video games. The
mathematics behind NURBS is very vast and complex, but this nurbs-calculator covers only the evaluation part of
NURBS curves. And I have tried to make it as simple as possible, so that anyone can understand NURBS without
knowing the complex mathematics.

Evaluation means finding the coordinates of a point on the curve, corresponding to some parameter.

##### Curve parameters:

A NURBS curve can be created by just 3 parameters – degree, control point and knot vector. The term knot vector
is very confusing. Actually it’s just a sequence of some real numbers, in non-decreasing order.

##### Degree and order:

It is the measure of curvature of the curve. A curve with degree 1 is called as linear curve, with degree 2
is called as quadratic and degree 3 is called as cubic. In most of NURBS applications you will find curves
of degree 2 and 3, only. The degree of the curve is integer and should be > 0. Order of the curve =
degree + 1.

##### Control points:

The control points determine the shape of the curve. Each point is having 4 float values – x position, y
position, z position and weight of the control point. The minimum number of control points required to
render a NURBS curve is the same as the order of the curve. So you need atleast 4 control points for degree
3 curve.

##### U parameter:

In mathematics, the equation of a curve can be expressed as a function of an independent variable, called
as a parameter. In nurbs-calculator I call this parameter as u parameter. U parameter is used to calculate
the coordinates of a point, on the curve, from its parametric equation. Generally it is assumed that u is 0
at the start of the curve and 1 at the end. So at middle of the curve the value of u will be 0.5. Let's
assume that there is a line starting at (1,1) and ending at (2,2). Also assume that u=0 at start and u=1 at
end. If you are asked to find the coordinates of point, which lies at middle of the line, then in
mathematical term you will say that what should be coordinates of point at u=0.5. You can provide this u
value to the parametric equation of line and calculate the coordinates at middle point.You can also assume
that u=1 at start and u=2 at end or u=10 at start and u=100 at end. It is your assumptions which defines the
middle point of the curve, so for 0< u < 1, middle point is at u = 0.5, for 1 < u < 2, middle is
at u = 1.5 and for 10 < u < 100 middle is at u=55.

##### Knot vector:

As mentioned earlier, knot vector is a sequence of some real numbers, in non-decreasing order. This
sequence depends on the assumption of u values. If you are assuming that u varies from 0 to 1, then knot
vector is sequence of numbers, between 0 and 1. So basically knot values are u values. There is no
significance of each knot value separately. It is the sequence, which is important. The total number of
knots = number of control points + degree + 1. If degree of the curve is 2 and there are 4 control points,
then there will be total 7 knot values. A curve will be called as Non-Uniform, if the sequence of these knot
values is non-uniform (e.g 0.0, 0.4, 0.5, 0.6, 0.9, 0.95, 1.0 ) and called as uniform if this sequence is
uniform (e.g. 0.0, 0.167, 0.333, 0.5, 0667, 0.833, 1.0).

##### Knot multiplicity:

Multiplicity means repetition of knot values. Multiplicity is a property of knots that refers to the number
of control points associated to a knot. On a cubic curve (degree 3), a knot can have a multiplicity of 1, 2,
or 3, but not more than 3. Similarily for degree 2 curve the multiplicity can’t be more than 2. If knot
values have multiplicity = degree + 1 at the start, then curve will be clamped at start, that means the
curve touches the first control point. If the multiplicity < (degree+ 1) at start, then the curve will
not touch the first control point and the curve will start at u = k[p], where p=degree. Same is applicable
for the end knots.If the multiplicity at the end is < (degree + 1), then the curve will not touch the
last control point and curve will end at u=k[m-p], where m = (total number of knots - 1). That means, if
knot vector is = {0, 0.111, 0.222, 0.333, 0.445, 0.556, 0.667, 0.778, 0.889, 1.0} for degree 2 curve, then
the curve will start from u = 0.2, which is k[2] and end at u=0.778, which is k[7]. If the multiplicity >
(degree + 1), then the curve will split in disjoint parts and the control point will be unused.

These terminolgies have been explained in simple way and may not represent the exact definition. To
understand these terms in details, please visit CS3621 Introduction to Computing with Geometry
Course Notes or read The NURBS Book. NURBS
and its properties are also explained on Rhinoceros - NURBS and
NURB curves - a guide for the
uninitiated .

WebGL (Web Graphics Library) is a JavaScript API for rendering interactive 3D computer graphics and 2D graphics
within any compatible web browser (reference - wiki - webGL). In
nurbs-calculator I have used three.js to render the nurbs curves, so that a curve
can be viewed in 3D. Three.js is a cross-browser JavaScript library/API used to create and display animated 3D
computer graphics in a web browser (reference - wiki -
three.js). Three.js uses WebGL.