Intro to Splines
CS 4620 Lecture 14
Cornell CS4620 Fall 2020 Steve Marschner • 1 Motivation: smoothness
• In many applications we need smooth shapes – that is, without discontinuities [Boeing] • So far we can make – things with corners (lines, triangles, squares, rectangles, …) – circles, ellipses, other special shapes (only get you so far!)
Cornell CS4620 Fall 2020 Steve Marschner • 2 Classical approach
• Pencil-and-paper draftsmen also needed smooth curves • Origin of “spline:” strip of flexible metal – held in place by pegs or weights to constrain shape – traced to produce smooth contour
Cornell CS4620 Fall 2020 Steve Marschner • 3 Translating into usable math
• Smoothness – in drafting spline, comes from physical curvature minimization – in CG spline, comes from choosing smooth functions • usually low-order polynomials • Control – in drafting spline, comes from fixed pegs – in CG spline, comes from user-specified control points
Cornell CS4620 Fall 2020 Steve Marschner • 4 Piecewise polynomial functions
p0(t) t0 ≤ t < t1 p (t) t ≤ t < t f(t) = 1 1 2 ⋮ pn−1(t) tn−1 ≤ t ≤ tn
spline segments join at knots
knot values Cornell CS4620 Fall 2020 Steve Marschner • 5 Spline segment
• defines the value of a spline over an interval between adjacent knot values • is a polynomial with coefficients that depend linearly on one or more controls • type and meaning of controls differs among types of spline
Cornell CS4620 Fall 2020 Steve Marschner • 6 Spline continuity pk−1(tk) ≠ pk(tk)
• Knots are transitions between segments – match values for continuity (C0) – match derivatives for smoothness (C1) pk−1(tk) = pk(tk) 0 C pk′−1(tk) ≠ pk′(tk)
pk−1(tk) = pk(tk) 1 C pk′−1(tk) = pk′(tk)
Cornell CS4620 Fall 2020 Steve Marschner • 7 Defining spline curves
• 2D spline curves are parametric curves S = f(t) t [0,N] { | 2 } • For splines, f(t) is piecewise polynomial – for this lecture, the knots are at the integers
Cornell CS4620 Fall 2020 Steve Marschner • 8 Defining spline curves
• 2D spline curves are parametric curves S = f(t) t [0,N] { | 2 } • For splines, f(t) is piecewise polynomial – for this lecture, the knots are at the integers
Cornell CS4620 Fall 2020 Steve Marschner • 8 Defining spline curves
• 2D spline curves are parametric curves S = f(t) t [0,N] { | 2 } • For splines, f(t) is piecewise polynomial – for this lecture, the knots are at the integers
Cornell CS4620 Fall 2020 Steve Marschner • 8 Defining spline curves
• 2D spline curves are parametric curves S = f(t) t [0,N] { | 2 } • For splines, f(t) is piecewise polynomial – for this lecture, the knots are at the integers
Cornell CS4620 Fall 2020 Steve Marschner • 8 Defining spline curves
• Generally f(t) is a piecewise polynomial – for this lecture, the discontinuities are at the integers – e.g., a cubic spline has the following form over [k, k + 1):
– Coefficients are different for every interval
Cornell CS4620 Fall 2020 Steve Marschner • 9 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 10 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 10 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 10 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 10 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 11 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 11 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 11 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 11 Coordinate functions
Cornell CS4620 Fall 2020 Steve Marschner • 11 Control of spline curves
• Specified by a sequence of controls (points or vectors) • Shape is guided by control points (aka control polygon) – interpolating: passes through points – approximating: merely guided by points – some splines interpolate only certain points (e.g. endpoints)
Cornell CS4620 Fall 2020 Steve Marschner • 12 Control of spline curves
• Specified by a sequence of controls (points or vectors) • Shape is guided by control points (aka control polygon) – interpolating: passes through points – approximating: merely guided by points – some splines interpolate only certain points (e.g. endpoints)
Cornell CS4620 Fall 2020 Steve Marschner • 12 Control of spline curves
• Specified by a sequence of controls (points or vectors) • Shape is guided by control points (aka control polygon) – interpolating: passes through points – approximating: merely guided by points – some splines interpolate only certain points (e.g. endpoints)
Cornell CS4620 Fall 2020 Steve Marschner • 12 Control of spline curves
• Specified by a sequence of controls (points or vectors) • Shape is guided by control points (aka control polygon) – interpolating: passes through points – approximating: merely guided by points – some splines interpolate only certain points (e.g. endpoints)
Cornell CS4620 Fall 2020 Steve Marschner • 12 Spline curves and their controls
• Each coordinate is separate – the function x(t) is determined solely by the x coordinates of the control points – this means 1D, 2D, 3D, … curves are all really the same • Spline curves are linear functions of their controls – moving a control point two inches to the right moves x(t) twice as far as moving it by one inch – x(t), for fixed t, is a linear combination (weighted sum) of the controls’ x coordinates – f(t), for fixed t, is a linear combination (weighted sum) of the controls
Cornell CS4620 Fall 2020 Steve Marschner • 13 Context
• Today we are talking about defining 1D curves, living in any dimension space – emphasizing 2D – higher dimensions are no more complex (just more coords) • Splines can be used to define objects of any dimension – 2D surfaces – 3D solids – … • Higher dimensions are built from same 1D functions – spline patches have N2 control points – joining patches together is more complicated than curves
Cornell CS4620 Fall 2020 Steve Marschner • 14 Plan 1. Spline segments – how to define a polynomial on [0,1] – …that has the properties you want – …and is easy to control 2. Spline curves – how to chain together lots of segments – …so that the whole curve has the properties you want – …and is easy to control 3. Refinement and evaluation – how to add detail to splines – how to approximate them with line segments
Cornell CS4620 Fall 2020 Steve Marschner • 15 Spline Segments
Cornell CS4620 Fall 2020 Steve Marschner • 16 A spline segment
• A polynomial function over the interval [tk, tk+1] • When talking about a single segment, to keep things simple, we assume
k = 0; t0 = 0; t1 = 1 – that is, the segment lives on the interval [0,1]
Cornell CS4620 Fall 2020 Steve Marschner • 17 Linear spline (line segment)
• Control points are the vertices
• Each segment will be a linear function p1 = (x1, y1)
– starts at p0 (when t = 0) – ends at p1 (when t = 1) – moves at constant speed along segment – both coordinate functions are linear
p0 = (x0, y0)
Cornell CS4620 Fall 2020 Steve Marschner • 18 Linear interpolation
• Take one coordinate, x • It is linear: x(t) = at + b
– we want x(0) = x0 and x(1) = x1 – this is achieved by b = x0 and a = x1 − x0
x(t) = (x1 − x0)t + x0
Cornell CS4620 Fall 2020 Steve Marschner • 19 Three equivalent notions
x(t) = (x1 − x0)t + x0
= (1 − t)x0 + tx1
= x0b0(t) + x1b1(t)
a linear polynomial with coefficients
that are linear functions of x0 and x1
a linear combination of the values
x0 and x1with weights (1 − t) and t
a linear combination of the functions
b0(t) = 1 − t and b1(t) = t with weights x0 and x1
Cornell CS4620 Fall 2020 Steve Marschner • 20 Spline matrix
• A nice generalizable way of writing this is
−1 1 x0 x(t) = [t 1] [ 1 0] [x1]
Cornell CS4620 Fall 2020 Steve Marschner • 21 Spline matrix
• A nice generalizable way of writing this is
−1 1 x0 x(t) = [t 1] [ 1 0] [x1]
spline monomials controls matrix
Cornell CS4620 Fall 2020 Steve Marschner • 21 Spline matrix
• A nice generalizable way of writing this is
−1 1 x0 x(t) = [t 1] [ 1 0] [x1]
spline monomials controls matrix
−1 1 x0 −1 1 x0 x(t) = [t 1] = [t 1] ([ 1 0] [x1]) ( [ 1 0]) [x1]
group this way to see coefficients group this way to see basis functions
Cornell CS4620 Fall 2020 Steve Marschner • 21 Linear 2D spline segment
• Vector formulation x(t)=(x x )t + x 1 0 0 y(t)=(y y )t + y 1 0 0 f(t)=(p p )t + p 1 0 0 • Matrix formulation
11 p f(t)= t 1 0 10p 1 ⇥ ⇤
Cornell CS4620 Fall 2020 Steve Marschner • 22 Basis function formulation
p1
f(t)
p0 f(t) = b0(t)p0 + b1(t)p1
Cornell CS4620 Fall 2020 Steve Marschner • 23 Hermite splines
• Less trivial example • Form of curve: piecewise cubic • Constraints: endpoints and tangents (derivatives)
t0
p0
p1
t1
Cornell CS4620 Fall 2020 Steve Marschner • 24 Hermite splines in 1D
Cornell CS4620 Fall 2020 Steve Marschner • 25 Hermite splines in 1D
x(t)=at3 + bt2 + ct + d 2 x0(t)=3at +2bt + c
x(0) = x0 = d
x(1) = x1 = a + b + c + d
x0(0) = x0 = c
x0(1) = x10 =3a +2b + c
Cornell CS4620 Fall 2020 Steve Marschner • 25 Hermite splines in 1D
x(t)=at3 + bt2 + ct + d 2 x0(t)=3at +2bt + c
x(0) = x0 = d
x(1) = x1 = a + b + c + d
x0(0) = x0 = c
x0(1) = x10 =3a +2b + c
Cornell CS4620 Fall 2020 Steve Marschner • 25 Hermite splines in 1D
x(t)=at3 + bt2 + ct + d 2 x0(t)=3at +2bt + c
x(0) = x0 = d
x(1) = x1 = a + b + c + d
x0(0) = x0 = c
x0(1) = x10 =3a +2b + c
d = x0
c = x0 a =2x 2x + x0 + x0 0 1 0 1 b = 3x +3x 2x0 x0 0 1 0 1
Cornell CS4620 Fall 2020 Steve Marschner • 25 Hermite splines
• Matrix form is much cleaner
2 21 1 p0 33 2 1 p f(t)= t3 t2 t 1 2 3 2 13 0010 t0 ⇥ ⇤ 6 10007 6t1 7 6 7 6 7 4 5 4 5 – coefficients = rows – basis functions = columns • note the two p columns sum to [0 0 0 1]T
Cornell CS4620 Fall 2020 Steve Marschner • 26 Matrix form of spline
f(t)=at3 + bt2 + ct + d
p0 ⇥⇥⇥⇥ p t3 t2 t 1 1 2⇥⇥⇥⇥3 2p 3 ⇥⇥⇥⇥ 2 ⇥ ⇤ 6 7 6p37 6⇥⇥⇥⇥7 6 7 4 5 4 5
f(t)=b0(t)p0 + b1(t)p1 + b2(t)p2 + b3(t)p3
Cornell CS4620 Fall 2020 Steve Marschner • 27 Matrix form of spline
f(t)=at3 + bt2 + ct + d
p0 ⇥⇥⇥⇥ p t3 t2 t 1 1 2⇥⇥⇥⇥3 2p 3 ⇥⇥⇥⇥ 2 ⇥ ⇤ 6 7 6p37 6⇥⇥⇥⇥7 6 7 4 5 4 5
f(t)=b0(t)p0 + b1(t)p1 + b2(t)p2 + b3(t)p3
Cornell CS4620 Fall 2020 Steve Marschner • 27 Matrix form of spline
f(t)=at3 + bt2 + ct + d
p0 ⇥⇥⇥⇥ p t3 t2 t 1 1 2⇥⇥⇥⇥3 2p 3 ⇥⇥⇥⇥ 2 ⇥ ⇤ 6 7 6p37 6⇥⇥⇥⇥7 6 7 4 5 4 5
f(t)=b0(t)p0 + b1(t)p1 + b2(t)p2 + b3(t)p3
Cornell CS4620 Fall 2020 Steve Marschner • 27 Hermite splines
• Hermite blending functions
b0(t) b1(t)
b2(t)
b3(t)
t
Cornell CS4620 Fall 2020 Steve Marschner • 28 Hermite to Bézier
• Mixture of points and vectors is awkward • Specify tangents as differences of points
t0
p0 p 1
t1
Cornell CS4620 Fall 2020 Steve Marschner • 29 Hermite to Bézier
• Mixture of points and vectors is awkward • Specify tangents as differences of points
t0
– t1 p0 p 1
Cornell CS4620 Fall 2020 Steve Marschner • 29 Hermite to Bézier
• Mixture of points and vectors is awkward • Specify tangents as differences of points
t0
– t1 p0 p 1
Cornell CS4620 Fall 2020 Steve Marschner • 29 Hermite to Bézier
• Mixture of points and vectors is awkward • Specify tangents as differences of points
q 1 q 2 I’m calling these t 0 points q just for – t this slide and the 1 next one. p0 q 0 q p 3 1
– note derivative is defined as 3 times offset • reason is illustrated by linear case
Cornell CS4620 Fall 2020 Steve Marschner • 29 Hermite to Bézier q 1 q 2 t p0 = q0 0 – t p1 = q3 1 p 0 q t0 = 3(q1 q0) 0 q p 3 1 t = 3(q q ) 1 3 2
p0 1000q0 p 0001q 1 = 1 2v 3 2 33 0 03 2q 3 0 2 6v 7 6 00 337 6q 7 6 17 6 7 6 37 4 5 4 5 4 5
Cornell CS4620 Fall 2020 Steve Marschner • 30 Hermite to Bézier q 1 q 2 t p0 = q0 0 – t p1 = q3 1 p 0 q t0 = 3(q1 q0) 0 q p 3 1 t = 3(q q ) 1 3 2
a 2 21 1 1000q0 b 33 2 1 0001q = 1 2c3 2 0010 3 2 33 0 03 2q 3 2 6d7 6 10007 6 00 337 6q 7 6 7 6 7 6 7 6 37 4 5 4 5 4 5 4 5
Cornell CS4620 Fall 2020 Steve Marschner • 30 Hermite to Bézier q 1 q 2 t p0 = q0 0 – t p1 = q3 1 p 0 q t0 = 3(q1 q0) 0 q p 3 1 t = 3(q q ) 1 3 2
a 13 31 q0 b 3 630 q = 1 2c3 2 33 003 2q 3 2 6d7 6 10007 6q 7 6 7 6 7 6 37 4 5 4 5 4 5
Cornell CS4620 Fall 2020 Steve Marschner • 30 Bézier matrix
13 31 p0 3 630 p f(t)= t3 t2 t 1 1 2 33 003 2p 3 2 ⇥ ⇤ 6 10007 6p37 6 7 6 7 4 5 4 5 – note that the basis functions are the Bernstein polynomials
n k n k The pk column b (t)= t (1 t) n,k k of the matrix ✓ ◆ defines the and that defines Bézier curves for any degree polynomial b3,k(t)
Cornell CS4620 Fall 2020 Steve Marschner • 31 Bézier basis
Cornell CS4620 Fall 2020 Steve Marschner • 32 Another way to Bézier segments
• A really boring spline segment: f(t) = p0 – it only has one control point – the curve stays at that point for the whole time • Only good for building a piecewise constant spline – a.k.a. a set of points
p0
Cornell CS4620 Fall 2020 Steve Marschner • 33 Another way to Bézier segments
• A piecewise linear spline segment – two control points per segment p – blend them with weights α and β = 1 – α 1 • Good for building a piecewise linear spline – a.k.a. a polygon or polyline