L1 Oe6980 PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 165

Lecture 1 - OE6980

Fundamentals of geometry and surface development

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


3D Shape Primitives:
• Points
– Vertices.
• Curves
– Lines, polylines, curves.
• Surfaces
– Triangle meshes, splines, subdivision surfaces,
implicit surfaces, particles.
• Solids

Lecture notes for OE 6980 2


Basic Shapes

Lecture notes for OE 6980 3


Fundamental Shapes

Lecture notes for OE 6980 4


Fundamental Shapes

Lecture notes for OE 6980 5


Fundamental Shapes

Lecture notes for OE 6980 6


Points
• Very popular primitives for modeling,
animation, and rendering.

Lecture notes for OE 6980 7


Points

Lecture notes for OE 6980 8


Points

Lecture notes for OE 6980 9


Curves

• Lines.
• Polynomials.
• Lagrange curves.
• Hermite curves.
• Bezier curves.
• B-Splines.
• NURBS.
• Subdivision curves.

Lecture notes for OE 6980 10


Polynomials

• No intuitive insight.
• Difficult for piecewise smooth curves.

Lecture notes for OE 6980 11


Surfaces
• Planes
• Triangle meshes.
• Tensor-product surfaces.
– Hermite surface, Bezier surface, B-spline surfaces, NURBS.
• Non-tensor product surfaces.
– Sweeping surface, ruling surface, etc.
• Subdivision surfaces.
• Implicit surfaces.
• Particle systems.

Lecture notes for OE 6980 12


Plane and Intersection

Lecture notes for OE 6980 13


Plane Equations

• General plane equation


ax+by+cz+d=0
• Normal of the plane
n=[a, b, c]

Lecture notes for OE 6980 14


Quadratic Surfaces

• Implicit representation
=0

• Sphere

• Ellipsoid

Lecture notes for OE 6980 15


Tensor Product Surface

• From curves to surfaces


• A simple curve example (Bezier)

where u [0,1]
• Consider pi is a curve pi(v)
• In particular, if pi is also a bezier curve, where
v [0,1]

Lecture notes for OE 6980 16


From curve to surface

• Then we have

Lecture notes for OE 6980 17


Bezier Surface

Lecture notes for OE 6980 18


B-Splines Surface

• B-Spline curves
c(u)  i0 pi Bi,k (u)
n

• Tensor product B-splines

where u [0,1], and v [0,1]

• Can we get NURBS surface this way?

Lecture notes for OE 6980 19


B-Splines Surface

Lecture notes for OE 6980 20


Tensor Product Properties

• Inherit from their curve generators.


• Continuity across boundaries
• Interpolation and approximation tools.

Lecture notes for OE 6980 21


NURBS Surface

Lecture notes for OE 6980 22


Triangular Surfaces

Lecture notes for OE 6980 23


Triangular Bezier Surface

Lecture notes for OE 6980 24


Barycentric Coordinates

Lecture notes for OE 6980 25


THANK YOU

Lecture notes for OE 6980 26


Lecture 2 - OE6980
Fundamentals of geometry and surface development

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


Surface of Revolution

Lecture notes for OE 6980 2


Surface of Revolution
• Geometric construction
– Specify a planar curve profile on y-z plane
– Rotate this profile with respect to z-axis
• Procedure-based model

Lecture notes for OE 6980 3


Sweeping Surface

Lecture notes for OE 6980 4


Sweeping Surface
• Surface of revolution is a special case of a
sweeping surface.
• Idea: a profile curve and a trajectory curve.
• Move a profile curve along a trajectory curve to
generate a sweeping surface.

Lecture notes for OE 6980 5


Geometric Modeling Techniques
• Control Point Manipulation.
• Weight Modification.
• Knot Vector Variation.
• Dynamic Modeling

Lecture notes for OE 6980 6


Control Point Manipulation

Lecture notes for OE 6980 7


Weight Modification

Lecture notes for OE 6980 8


Knot Vector Variation

Lecture notes for OE 6980 9


Dynamic Modeling

Lecture notes for OE 6980 10


Basic idea of subdivision
• Start from an initial control polygon.
• Recursively refine it by some rules.
• A smooth surface (curve) in the limit.

Lecture notes for OE 6980 11


Chaikin’s corner cutting scheme

Lecture notes for OE 6980 12


Chaikin’s corner cutting scheme

Lecture notes for OE 6980 13


Chaikin’s corner cutting scheme

Lecture notes for OE 6980 14


Chaikin’s corner cutting scheme

Lecture notes for OE 6980 15


Other modeling primitives
• Spline patches.
• Polygonal meshes.

Lecture notes for OE 6980 16


Spline patches
Advantages:
• High level control.
• Compact analytical representations.

Disadvantages:
• Difficult to maintain and manage inter-patch
smoothness constraints.
• Expensive trimming needed to model features.
• Slow rendering for large models.

Lecture notes for OE 6980 17


Polygonal meshes
Advantages:
• Very general.
• Can describe very fine detail accurately.
• Direct hardware implementation.

Disadvantages:
• Heavy weight representation.
• A simplification algorithm is always needed.

Lecture notes for OE 6980 18


Subdivision schemes
Advantages:
• Arbitrary topology.
• Level of detail.
• Unified representation.

Disadvantages:
• Difficult for analysis of properties like
smoothness and continuity.

Lecture notes for OE 6980 19


Catmull-Clark Scheme
• Face point:
the average of all the points defining the
old face.

• Edge point:
the average of two old vertices and two
new face points of the faces adjacent to the
edge.
• Vertex point:(F  2E  (n  3)V ) / n
F: the average of the new face points of all faces
adjacent to the old vertex.

E: the average of the midpoints of all


adjacent edges.

V: the old vertex.

Lecture notes for OE 6980 20


THANK YOU

Lecture notes for OE 6980 21


Lecture 3 - OE6980
Fundamentals of geometry and surface development

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


Catmull-Clark Scheme

Initial mesh Step 1

Step 2 Limit surface

Lecture notes for OE 6980 2


Catmull-Clark Subdivision

Lecture notes for OE 6980 3


Midedge scheme

Lecture notes for OE 6980 4


Midedge scheme

(a) (b)

(c) (d)

Lecture notes for OE 6980 5


Subdivision Solids

Lecture notes for OE 6980 6


Implicit Surfaces Design using Blobs
• None of these parameters allow the
designer to specify exactly where
the surface is located.
• A designer has only indirect
control over the shape of a blobby
implicit surface.
• Blobby models facilitate the design
of smooth, complex, organic-
appearing shapes.

Implicit Surfaces: f (x, y, z) = Constant, e.g.


x^{2}+y^{2}+z^{2}-4=0, sphere.
Lecture notes for OE 6980 7
Skeletal Design
• Global and local control in three separate ways:
– Defining or manipulating of the skeleton;
– Defining or adjusting those implicit functions defined
for each skeletal element;
– Defining a blending function to weight the individual
implicit functions.

Lecture notes for OE 6980 8


Example - Kitchen Fiction

Lecture notes for OE 6980 9


Solid Modeling

• Constructive Solid Geometry (CSG)


• Boundary representation
• Cell decomposition

Lecture notes for OE 6980 10


Implicit Functions

Functions of the form


f(x,y,z) <= 0
can be used to describe solid.

Two types of implicit solid:


– constructive solid geometry (CSG)
– blobby models

Lecture notes for OE 6980 11


Constructive Solid Geometry

• CSG builds solid models by combining


primitive (implicit) objects with Boolean
operators
• Objects: spheres, cubes, cylinders, etc.
• Operators: addition, intersection, union, etc.
• Assembled into CSG tree:
– internal nodes = operators
– leaves = objects

Lecture notes for OE 6980 12


Constructive Solid Geometry

Lecture notes for OE 6980 13


Constructive Solid Geometry
• Bottom-up evaluation of binary
tree.
• Compute B-rep of the two child
nodes to produce an intermediate
result (Difficult and complex).
• Implicit models are numerically
more stable than B-reps to
represent those intermediate
nodes.

Lecture notes for OE 6980 14


Example BlobTree

Lecture notes for OE 6980 15


Boundary Representations
• Represent only the boundary
• Polygonal, analytic and subdivision surfaces
the most popular
• Polygon-based surfaces require special data
structures, such as
– winged-edge
– quad-edge

Lecture notes for OE 6980 16


Cell Decompositions
• Objects expressed as cells or polyhedra
attached to each other
• Voxel-based models very popular
• data arranged on a grid
– simple yet powerful and general
– intuitive and natural representation
– can represent details easily
– mature rendering algorithms

Lecture notes for OE 6980 17


Cell Decompositions
Voxel-based modeling systems:
– wax-like objects: Galyean and Hughes (`91)
– detailed objects: Wang and Kaufman (`95)
– deformable objects: Gibson (`95, `97, `99)

Lecture notes for OE 6980 18


THANK YOU

Lecture notes for OE 6980 19


Lecture 5 and 6 (Tutorial 1 Based) - OE6980
Polynomial interpolation

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


General nth Order Interpolation
Given any n+1 points: x0 , f ( x0 ), x1 , f ( x1 ), ..., xn , f ( xn )
The polynomial that interpolates all points is:

f n ( x)  b0  b1 x  x0   b2 x  x0 x  x1   ...  bn x  x0 ...x  xn 1 


b0  f ( x0 )
b1  f [ x0 , x1 ]
....
bn  f [ x0 , x1 , ... , xn ]

Lecture notes for OE 6980 2


Divided Differences
f [ xk ]  f ( xk ) Zeroth order DD
f [ x1 ]  f [ x0 ]
f [ x0 , x1 ]  First order DD
x1  x0
f [ x1 , x2 ]  f [ x0 , x1 ]
f [ x0 , x1 , x2 ]  Second order DD
x2  x0
............
f [ x1 , x2 ,..., xk ]  f [ x0 , x1 ,..., xk 1 ]
f [ x0 , x1 ,..., xk ] 
xk  x0

Lecture notes for OE 6980 3


Divided Difference Table
x F[ ] F[ , ] F[ , , ] F[ , , ,] F[ , , ,]
x0 F[x0] F[x0,x1] F[x0,x1,x2] F[x0,x1,x2,x3] F[x0,x1,x2,x3,x4]
x1 F[x1] F[x1,x2] F[x1,x2,x3] F[x1,x2,x3,x4]
x2 F[x2] F[x2,x3] F[x2,x3,x4]
x3 F[x3] F[x3,x4]
x4 F[x4]

 i 1 
x  x j 
n
f n ( x)    F [ x0 , x1 ,..., xi ] 
i 0  j 0 

Lecture notes for OE 6980 4


Divided Difference Table ……….. Example 1
x F[ ] F[ , ] F[ , , ] F[ , , ,] F[ , , ,]
0 0 2 -0.5/3 ((5/3 – 1.5)/5 [{((7/4 – 5/3)/7
– (-0.5/3))/6 - (5/3 –
1.5)/5)/9
} – {((5/3 –
1.5)/5 – (-
0.5/3))/6}]/10
1 2 1.5 (5/3 – ((7/4 – 5/3)/7
1.5)/5 - (5/3 –
1.5)/5)/9
3 5 5/3 (7/4 –
5/3)/7
6 10 7/4
10 17

Lecture notes for OE 6980 5


Divided Difference Table ……….. Example 2
x F[ ] F[ , ] F[ , , ] F[ , , ,] F[ , , ,]
0 0 1 0 0 0
1 1 1 0 0
2 2 1 0
3 3 1
4 4

Lecture notes for OE 6980 6


Divided Difference Table ……….. Example 3
x F[ ] F[ , ] F[ , , ] F[ , , ,]
0 1 5 3 0
1 6 11 3
2 17 17
3 34

Lecture notes for OE 6980 7


Lagrange Interpolation
Problem: xi x0 x1 …. xn
Given
yi y0 y1 …. yn

Find the polynomial of least order f n (x) such that:

f n ( xi )  f ( xi ) for i  0,1,..., n
n
Lagrange Interpolation Formula: f n ( x)   f xi   i ( x)
i 0

x  x 
n
 i ( x)   x  x 
j 0, j i
j

i j
Lecture notes for OE 6980 8
Lagrange Interpolation

 i ( x) are called the cardinals.


The cardinals are n th order polynomial s :
0 i  j
i (x j )  
1 i  j

Lecture notes for OE 6980 9


Lagrange Interpolation Example 3
g (x) = a0x0 + a1x1 + a2x2 + a3x3
G (x = X )
0
=f
0 = a0x00 + a1x10 + a2x20 + a3x30
G (x = X )
1
=f
1 = a0x01 + a1x11 + a2x21 + a3x31
G (x = X )
2
=f
2 = a0x02 + a1x12 + a2x22 + a3x32
G (x = X )
3
=f
3 = a0x03 + a1x13 + a2x23 + a3x33
Solution

G (x = 0) = f
0 = 1= a0
G (x = 1) = f
1 = 6 = a0 + a1 + a2 + a3
G (x = 2) = f
2 = 17 = a0 + 2a1 + 4a2 + 8a3
G (x = 3) = f
3 = 34 = a0 + 3a1 + 9a2 + 27a3

Four unknowns, four equations. Unique solution. Solution of


simultaneous equations.

Solve for (a0, a1, a2, and a3).


Lecture notes for OE 6980 10
Example 4
Find a polynomial to interpolate: x y
Both Newton’s interpolation
method and Lagrange 0 1
interpolation method must
give the same answer. 1 3
g (x) = a0x0 + a1x1 + a2x2 + a3x3
2 2
+ a4x4
a0=1
a0+a1+a2+a3+a4=3
3 5
a0+2a1+4a2+8a3+16a4= 2
a0+3a1+9a2+27a3+81a4= 5 4 4
a0+4a1+16a2+64a3+256a4= 4
Lecture notes for OE 6980 11
Inverse Interpolation
Example 5
x 1 2 3
Problem : y 3.2 2.0 1.6
Given the table. Find x such that f ( x )  2.5
a0+a1+ a2= 3.2
g (y) = a0y0 + a1y1 + a2y2 a0+2a1+ 4a2= 2.0
a0+3a1+ 9a2= 1.6

3.2 1 -.8333 1.0417


2.0 2 -2.5
1.6 3

x  f 2 ( y )  1  0.8333( y  3.2)  1.0417( y  3.2)( y  2)


x  f 2 (2.5)  1  0.8333( 0.7)  1.0417( 0.7)( 0.5)  1.2187
Lecture notes for OE 6980 12
THANK YOU

Lecture notes for OE 6980 13


Lecture 7 - OE6980
Parametric Curves in Polynomial Forms

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


Types of Curves / Surfaces

• Explicit:
y = mx + b z = A x + By + C
• Implicit:
Ax + By + C = 0 (x – x0)2 + (y – y0)2 – r2 = 0
• Parametric:
x = x0 + (x1 – x0)t x = x0 + rcos
y = y0 + (y1 – y0)t y = y0 + rsin

Lecture notes for OE 6980 2


Our Focus
• Parametric surfaces
– Hermite curve
– Bezier curve
– B-spline
– Non-uniform Rational B-spline Curve/surface (NURB
C/S)
– T-spline, etc.
Non-uniform is a type of knot vector, rational implies
weight (or rational function), and b-spline is basis or
blending function spline.
Rational function: R (x) = f (x) / g (x).

Lecture notes for OE 6980 3


Implicit Surfaces

• Functions in the form of F(x, y, z) = 0


– i.e. Quadric functions

Sphere: f(x,y,z) = x2+ y2+ z 2 = 0

Lecture notes for OE 6980 4


Why parametric?
• Parametric curves are very flexible.
• Parameter count gives the object’s dimension.
(x(u,v), y(u,v), z(u,v)) : 2D surface
One parameter - Curve (1D)
Two parameters - Surface (2D)
Three parameters - Volume (3D)
Note: Number of parameters not dependent upon the
Euclidian coordinates, all curve, surface, volume can
be defined with (x, y, z).
• Coordinate functions independent.

Lecture notes for OE 6980 5


Specifying curves

• Control Points:
– A set of points that influence
the curve’s shape.
• Interpolating curve:
– Curve passes through the
control points.
• Control polygon:
– Control points merely
influence shape.

Lecture notes for OE 6980 6


Piecewise curve segments

We can represent an arbitrary length curve as a series of curves


pieced together.
But we will want to control how these curves fit together …

Lecture notes for OE 6980 7


Continuity between curve segments

• If the tangent vectors of two cubic curve segments are


equal at the join point, the curve has first-degree
continuity, and is said to be C1 continuous
n n
• If the direction and magnitude of d / dt [Q(t)] through
the nth derivative are equal at the join point, the curve
n
is called C continuous
• If the directions (but not necessarily the magnitudes) of
two segments’ tangent vectors are equal at the join
1
point, the curve has G continuity
Lecture notes for OE 6980 8
Example
• The curves Q1, Q2, Q3 join at point P
• Q1 and Q2 have equal tangent vectors at P and hence C1 and G1
continuous
• Q1 and Q3 have tangent vectors in the same direction but Q3 has
twice magnitude, so they are only G1 continuous at P

Lecture notes for OE 6980 9


Parametric Cubic Curves

• In order to assure C2 continuity our functions must


be of at least degree 3.
• Cubic has 4 degrees of freedom and can control 4
things.
• Use polynomials: x(t) of degree n is a function of t.
n


x (t ) =  i
a t
i =0
n

– y(t) and z(t) are similar and each is handled independently

Lecture notes for OE 6980 10


Hermite curves

• A cubic polynomial
• Polynomial can be specified by the position
of, and gradient at, each endpoint of curve.
• Determine: x = X(t) in terms of x0, x0’, x1,
x1’
Now:
X(t) = a3t3 + a2t2 + a1t + a0
and X/(t) = 3a3t2 + 2a2t + a1
Lecture notes for OE 6980 11
Finding Hermite coefficients

Substituting for t at each endpoint:


x0 = X(0) = a0 x0’= X/(0) = a1
x1 = X(1) = a3 + a2 + a1 + a0 x1’= X/(1) = 3a3 + 2a2+ a1

And the solution is:


a0 = x0 a1 = x0’
a2 = -3x0 – 2x0’+ 3x1 – x1’ a3 = 2x0 + x0’ - 2x1 + x1’

Lecture notes for OE 6980 12


The Hermite matrix: MH
Resultant polynomial can be expressed in matrix form (computer
implementation):

X(t) = tTMHq (q is the control vector)

 2 1 − 2 1   x0 
− 3 − 2 3 − 1  x '

X (t ) = t 3 t 2 t 1
0 1
 0 
0 0   x1 
  
1 0 0 0   x1 ' 
We can now define a parametric polynomial for each coordinate
required independently, ie. X(t), Y(t) and Z(t)

Lecture notes for OE 6980 13


Hermite Basis (Blending) Functions

2 1 − 2 1   x0 
− 3 − 2 3 − 1  x '

X (t ) = t t t 1
3 2


0 1 0
  0 

0   x1 
  
1 0 0 0   x1 ' 
= (2t 3 − 3t 2 + 1)x0 + (t 3 − 2t 2 + t )x0 '+ (−2t 3 + 3t 2 )x1 + (t 3 − t 2 )x1 '

Lecture notes for OE 6980 14


Hermite Basis (Blending) Functions

X (t ) = (2t 3 − 3t 2 + 1)x0 + (t 3 − 2t 2 + t )x0 '+(−2t 3 + 3t 2 )x1 + (t 3 − t 2 )x1 '

The graph shows the shape of the


four basis functions – often called x0 x1
blending functions.
They are labelled with the elements
of the control vector that they
weight.
Note that at each end only position x0'
is non-zero, so the curve must
touch the endpoints

Lecture notes for OE 6980


x1/ 15
Family of Hermite curves.
Note: Start points on left.

y(t)

x(t)

Lecture notes for OE 6980 16


Displaying Hermite curves.
• Simple :
– Select step size to suit.
– Plug x values into the geometry matrix.
– Evaluate P(t) → x value for current position.
– Repeat for y & z independently.
– Draw line segment between current and previous
point.
• Joining curves:
– Coincident endpoints for C0 continuity
– Align tangent vectors for C1 continuity
.
Lecture notes for OE 6980 17
Bézier Curves
• Hermite cubic curves are difficult to model
– need to specify point and gradient.
• More intuitive to only specify points.
• Pierre Bézier (an engineer at Renault)
specified 2 endpoints and 2 additional
control points to specify the gradient at the
endpoints.
• Can be derived from Hermite matrix:
– Two end control points specify tangent.

Lecture notes for OE 6980 18


Bézier Curves
Note the Convex Hull has been shown as a
dashed line – used as a bounding extent P2
for intersection purposes.
P4

P1
P3
P3

P4
P1

P2

Lecture notes for OE 6980 19


Bézier Matrix

• The cubic form is the most popular


X(t) = tTMBq (MB is the Bézier matrix)
• With n=4 and r=0,1,2,3 we get:
 −1 3 − 3 1 q0 
 3 −6 3 0  q1 

X (t ) = t 3 t 2 t 1 
− 3 3 0 0   q2 
  
1 0 0 0  q3 

• Similarly for Y(t) and Z(t)


Lecture notes for OE 6980 20
Bézier blending functions

This is how they look –


The functions sum to 1 at
any point along the curve. q0 q3

Endpoints have full weight q1 q2


The weights of each
function is clear and the
labels show the control
points being weighted.

Lecture notes for OE 6980 21


Joining Bezier Curves

• G1 continuity is provided at the endpoint


when P2 – P3 = k (Q1 – Q0)
• if k=1, C1 continuity
1
is obtained

Lecture notes for OE 6980 22


Bicubic patches

• The concept of parametric curves can be


extended to surfaces
• The cubic parametric curve is in the form of
Q(t)=tTM q where q=(q1,q2,q3,q4) : qi control
points, M is the basis matrix (Hermite or
Bezier,…), tT=(t3, t2, t, 1)

Lecture notes for OE 6980 23


• Now we assume qi to vary along a parameter s,
• Qi(s,t)=tTM [q1(s),q2(s),q3(s),q4(s)]
• qi(s) are themselves cubic curves, we can write
them in the form …

Lecture notes for OE 6980 24


Bicubic patches
Q( s, t ) = t T . M .( sT . M .[q11 , q12 , q13 , q14 ],..., sT . M .[q 41, q 42 , q 43 , q 44 ])
= t T . M .q. M T .s  q11
q
q21 q31 q41 
 12 q22 q32 q42 
q13 q23 q33 q43 
where q is a 4x4 matrix 
q14 q24 q34 q44 

Each column contains the control points of


q1(s),…,q4(s)
x,y,z computed by x ( s , t ) = t T
. M .q x . M T
.s
y ( s, t ) = t T . M .q y . M T .s
z ( s, t ) = t T . M .q z . M T .s
Lecture notes for OE 6980 25
Bézier example

• We compute (x,y,z) by
x( s, t ) = t T . M B .q x . M BT . s
q x is 4  4 array of x coords
y ( s, t ) = t T . M B .q y . M BT . s
q y is 4  4 array of y coords
z ( s, t ) = t T . M B .q z . M BT . s
q z is 4  4 array of z coords

Lecture notes for OE 6980 26


Continuity of Bicubic patches.

• Hermite and Bézier patches


– C0 continuity by sharing 4
control points between
patches.
– C1 continuity when both sets
of control points either side
of the edge are collinear with
the edge.

Lecture notes for OE 6980 27


Displaying Bicubic patches.
• Need to compute the normals
– vector cross product of the 2 tangent vectors.
• Need to convert the bicubic patches into a
polygon mesh
– tessellation

Lecture notes for OE 6980 28


Normal Vectors
  
Q ( s, t ) = (t T . M .q. M T . s ) = t T . M .q. M T . ( s )
s s s
= t T . M .q x . M T .[3s 2 ,2 s,1,0]T
  T  T
Q ( s, t ) = (t . M .q. M . s ) = (t ). M .q. M T . s
T

t t t
= [3t 2 ,2t ,1,0]T . M .q. M T .s
 
Q ( s, t )  Q ( s, t ) = ( y s zt − yt z s , z s xt − zt xs , xs yt − xt y s )
s t

The surface normal is biquintic (two variables, fifth-


degree) polynomial and very expensive
Can use finite difference to reduce the computation
Lecture notes for OE 6980 29
THANK YOU

Lecture notes for OE 6980 30


Lecture 9 - OE6980
Rational Bezier Curves

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


Rational curves
 Rational Bezier curves
In homogeneous coordinates, the point (x, y, z) is
represented by (xw, yw, zw, w).
Point it maps to on the plane is represented
by (xw, yw, zw), so projection can be represented in
matrix form.
Rational curves
 A rational curve is a curve defined in four-
dimensional space – known as projective
space – which is then projected into three-
dimensional.
Rational Bézier curves
 One major disadvantage of Bézier curves are
that they are not invariant under projection
 This means when perspectively projecting a 3D
Bézier curve on the screen the result is no longer
a Bézier curve
 For CAGD applications 3D curves are often
projected to be displayed on 2D screens
 When projected, the original nonrational curve
results in a rational curve
 This leads us to rational Bézier curves
 They are invariant under projective transformation
Rational Bézier curves

 Definition of a rational Bézier curve


n
n
w i bi Bi t
i 0
x t : n
n
wi B t
i
i 0

 As before the bi are the control points


 Additionaly every point bi has a weight wi
Rational Bézier curves
 You can think of a rational Bézier curve
of the projection of a nonrational one
from 4D space to the hyper-plane w=1
 The control polyhedron of this is
spanned by the 4D points (bi . wi , wi)
 The bi are the projection of the bi .wi to
the hyperplane w=1
Rational Bézier curves
 Let‘s visualize this for a 2D rational Bézier
curve as a projected Bézier curve in 3D to
plane z=1

z=1 plane

3D Bézier curve

2D rational Bézier curve


Rational Bézier curves
 The weights give a further degree of liberty
to the designer
 Changing the weight differs from moving the
control point

Moving a control point (left) differs heavily from changing its weight (right)
Rational Bézier curves
 Because they are invariant under
projection the projected curve can be
modeled further
 E.g. a car designer may change the
projected car body
 Bézier curves are a subset of the
rational Bézier curves
 Special case: Equal weights
Rational Bezier curves
 Consider the projection of a 3D Bezier curve in to 2D space:
(z=1)
 We do this by dividing by z(u) to define a 2D curve R(u):

x(u ) y (u )
R(u )  ( , )
z (u ) x(u )
 The 3D curve:

3
Q (u )   PiBi (u )
i 0

Pi  ( xi, yi, zi )
Rational Bezier curves (cont.)
 Now a special notation is used for writing the 3D control points of a
rational curve in 2D space:

Pi w  ( wixi, wiyi, wi )
 We write our 3D curve as:
 wixi 
Q(u )    wiyi  Bi (u )
3

i 0
 wi 

 which is projected into 2D space as:

  wixiBi (u )  wiyiBi (u ) 
R(u )   , 
  wiBi (u )  wiBi (u ) 
 
Rational Bezier curves
 We project a 4D curve into 3D space
 Each control point is now:

Pi w  ( wixi, wiyi, wizi, wi )


 And we have:

R(u ) 
 w P B (u )
i i i

 w B (u) i i
Rational Bezier curves
 The effect of changing weight wi
Rational Bezier curves
 The different effect of control point movement and weight
adjustment
THANK YOU

Lecture notes for OE 6980 15


Lecture - OE6980
Degree Elevation for Bezier Curves

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]

Lecture notes for OE 6980 1


Bezier Curves …………….. Degree Elevation
- Many applications that involve two or more Bézier curves require
all involved curves to have the same degree.

- Moreover, although higher degree Bézier curves require longer


time to process, they do have higher flexibility for designing
shapes.

- Therefore, it would be very helpful to increase the degree of a


Bézier curve without changing its shape.

- Note that "without changing the curve's shape" is the key point;
otherwise, just increasing the degree of a Bézier curve does not
make any practical sense.

- Increasing the degree of a Bézier curve without changing its shape


is referred to as degree elevation.
2
Bezier Curves …………….. Degree Elevation

- A Bézier curve of degree n defined by n + 1 control points P0, P1, P2,


..., Pn and we want to increase the degree of this curve to n +
1 without changing its shape.
- Since a degree n + 1 Bézier curve is defined by n + 2 control points,
we need to find such a new set of control points.
- Obviously, P0 and Pn must be in the new set because the new curve
also passes through them. Therefore, what we need is only n new
control points.
- Let the new set of control points be Q0, Q1, Q2, ..., Qn+1. As
mentioned above, Q0 = P0 and Qn+1 = Pn.

3
Bezier Curves …………….. Degree Elevation
- Following are formulae for each control points from Q1 to Qn.

4
Bezier Curves …………….. Degree Elevation
- Example 1: We show a Bézier curve of degree 4 whose control
points are shown in red rectangles.

- After increasing its degree to 5, the new control polyline is shown in


solid line segments. It is clear that all corners are cut. The left table
gives the ratio on each leg of the original control polyline.

i 1 - i/(n+1)
1 0.8
2 0.6
3 0.4
4 0.2

5
Bezier Curves …………….. Degree Elevation
- Example 2: We show a Bézier curve of degree 4 whose degree is
raised continuously.

6
THANK YOU

Lecture notes for OE 6980 7


Lecture 17 - OE6980
B-Spline Different Forms and Properties - PART 2
___________________________________________________________________

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]
1|Page
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Example 1: Knots with Positive Multiplicity: Case of 0/0 - Define 0/0 to be 0.

- Computer implementation, there is an efficient algorithm free of this problem.

- Furthermore, if ui is a knot of multiplicity k (i.e., ui = ui+1 = ... = ui+k-1), then knot spans [ui,ui+1),
[ui+1,ui+2), ..., [ui+k-2,ui+k-1) do not exist, and, as a result, Ni,0(u), Ni+1,0(u), ..., Ni+k-1,0(u) are all zero
functions.

- U = {0, 0, 0, 1, 1, 1}. Thus, 0 and 1 are of multiplicity 3 (i.e., 0(3) and 1(3)). For three point case,
n =2 and as a result, m = 5 for p =2 and the knot assignments are:

u0 u1 u2 u3 u4 u5
0 0 0 1 1 1

- Compute Ni,0(u)'s. Since m = 5 and p = 0 (degree 0 basis functions), we have n = m - p - 1 = 4. As


the table below shows, there is only one non-zero basis functions of degree (0): N2,0(u).

2|Page
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Basis Function Range Equation Comments


N0,0(u) all u 0 since [u0, u1) = [0,0) does not exist
N1,0(u) all u 0 since [u1, u2) = [0,0) does not exist
N2,0(u) [0, 1) 1
N3,0(u) all u 0 since [u3, u4) = [1,1) does not exist
N4,0(u) all u 0 since [u4, u5) = [1,1) does not exist

- Degree 1. Since p is 1, n = m - p - 1 = 3. Table shows the result:

Basis Function Range Equation


N0,1(u) all u 0
N1,1(u) [0, 1) 1 – u
N2,1(u) [0, 1) u
N3,1(u) all u 0

3|Page
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Degree 2. Since p is 2, n = m - p - 1 = 2. Table shows the result:

Basis Function Range Equation


N0,2(u) all u (1-u)2
N1,2(u) all u 2(1-u)u
N2,2(u) all u u2

- Analyze N0,2(u): Global, partition of unity, Bezier basis function B02 (u).

- Analyze N1,2(u): Global, partition of unity, Bezier basis function B 12 (u).

- Analyze N2,2(u): Global, partition of unity, Bezier basis function B 22 (u).

4|Page
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Example 2: Minimum possible value for p = 0. Minimum feasible value for p = 1. Minimum value
for a space curve = 2.

Minimum possible value for n = 0. Minimum feasible value for n = 1. Minimum value for a space
curve = 2.

Minimum possible value for m = 1. Minimum feasible value for n = 3. Minimum value for a space
curve = 5.

Example 3: Knots with Positive Multiplicity: Case of 0/0 - Define 0/0 to be 0.

- U = {0, 0, 0, 0, 1, 1, 1, 1}. Thus, 0 and 1 are of multiplicity 4 (i.e., 0(4) and 1(4)). For four points
case, n =3 and as a result, m = 7 for p = 3 and the knot assignments are:

u0 u1 u2 u3 u4 u5 u6 u7
0 0 0 0 1 1 1 1

- Compute Ni,0(u)'s. Since m = 7 and p = 0 (degree 0 basis functions), we have n = m - p - 1 = 6. As


the table below shows, there is only one non-zero basis function of degree (0): N3,0(u).

5|Page
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Basis Function Range Equation Comments


N0,0(u) all u 0 since [u0, u1) = [0,0) does not exist
N1,0(u) all u 0 since [u1, u2) = [0,0) does not exist
N2,0(u) all u 0 since [u2, u3) = [0,0) does not exist
N3,0(u) all u 1
N4,0(u) all u 0 since [u4, u5) = [1,1) does not exist
N5,0(u) all u 0 since [u5, u6) = [1,1) does not exist
N6,0(u) all u 0 since [u6, u7) = [1,1) does not exist

- Degree 1. Since p is 1, n = 7 - p - 1 = 5.

6|Page
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Table shows the result:

Basis Function Range Equation


N0,1(u) all u 0
N1,1(u) all u 0
N2,1(u) [0, 1) 1 – u
N3,1(u) [0, 1) U
N4,1(u) all u 0
N5,1(u) all u 0

- Compute for degree 2.

- Compute for degree 3. And, analyze N0,3(u): Global, partition of unity, Bezier basis function B03 (u).
Analyze N1,3(u): Global, partition of unity, Bezier basis function B 13 (u). Analyze N2,3(u): Global,
partition of unity, Bezier basis function B23 (u). Analyze N3,3(u): Global, partition of unity, Bezier basis
function B33 (u).

7|Page
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Example 4: Knots with Positive Multiplicity: Case of 0/0 - Define 0/0 to be 0.

- U = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}. Thus, 0 and 1 are of multiplicity 5 (i.e., 0(5) and 1(5)). For five points
case, n =4 and as a result, m = 9 for p = 4 and the knot assignments are:

u0 u1 u2 u3 u4 u5 u6 u7 u8 u9
0 0 0 0 0 1 1 1 1 1

- Compute Ni,0(u)'s. Since m = 9 and p = 0 (degree 0 basis functions), we have n = m - p - 1 = 8. As


the table below shows, there is only one non-zero basis function of degree (0): N4,0(u).

- Compute for degree 1, 2, 3.

- Compute for degree 4. And, analyze N0,4(u): Global, partition of unity, Bezier basis function B04 (u).
Analyze N1,4(u): Global, partition of unity, Bezier basis function B 14 (u). Analyze N2,4(u): Global,
partition of unity, Bezier basis function B24 (u). Analyze N3,4(u): Global, partition of unity, Bezier basis
function B34 (u). Analyze N4,4(u): Global, partition of unity, Bezier basis function B44 (u).

8|Page
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Qs and As …

Thank you all!

9|Page
Lecture 18 - OE6980
B-Spline Different Forms and Properties - PART 3
___________________________________________________________________

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]
1|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Closed curves: Many ways to generate closed curves. (1) Wrapping control points or (2) Wrapping
knot vectors.

Wrapping Control Points: Suppose we want to construct a closed B-spline curve C(u) of
degree p defined by n+1 control points P0, P1, ..., Pn. The number of knots is m+1,
where m = n + p + 1. Here is the construction procedure:
- Design an uniform knot sequence of m+1 knots: u0 = 0, u1 = 1/m, u1 = 2/m, ..., um = 1. Note that
the domain of the curve is [up, um-p].
- Wrap the first p and last p control points. More precisely, let P0 = Pn-p+1, P1 = Pn-p+2, ..., Pp-2 = Pn-
1 and Pp-1 = Pn. This is shown in the figure below.

2|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Example 1: Given P0, P1, P2, P3, and P4; p = 3. m = 8.

Wraps: Po = Pn-p+1 = P2; P1 = Pn-p+2 = P3; P2 = Pn-p+3 = P4 ….. up to Pp-1 = Pn. So, [P0, P1, P2, P3, and
P4] becomes [P0, P1, P0, P1, and P2] for a closed curve.

Note: Constructed curve is Cp-1 continuous at the joining point C(up) = C(un-p).

Example 2: Figure (a) shows an open B-spline curve of degree 3 defined by 10 (n = 9) control points
and a uniform knot vector.

- In the figure, control point pairs 0 and 7, 1 and 8, and 2 and 9 are placed close to each other to
illustrate the construction.

- Figure (b) shows the result of making control points 0 and 7 identical. The shape of the curve does
not change very much. Then, control points 1 and 8 are made identical as shown in Figure (c). It is
clear that the gap between the first and last points of the curve is closer. Finally, the curve becomes
a closed on when control points 2 and 9 are made identical as shown in Figure (d).

- Wraps: Po = Pn-p+1 = P7; P1 = Pn-p+2 = P8; P2 = Pn-p+3 = P9 ….. up to Pp-1 = Pn. So, [P0, P1, P2, P3, …
and P9] becomes [P0, P1, P2, P3, P4, P5, P6, P0, P1, P2] for a closed curve.

3|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

(a) (b)

(c) (d)
4|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Wrapping Control Points: Suppose we want to construct a closed B-spline curve C(u) of
degree p defined by n+1 control points P0, P1, ..., Pn. The following is the construction procedure:

Add a new control point Pn+1 = P0. Therefore, the number of control points is n+2.

Find an appropriate knot sequence of n+1 knots u0, u1, ..., un. These knots are not necessarily
uniform, an advantage over the method discussed above.

Add p+2 knots and wrap around the first p+2 knots: un+1 = u0, un+2 = u1, ..., un+p = up-
1, un+p+1 = up, un+p+2 = up+1 as shown in the following diagram. In this way, we have n+p+2 = (n+1)
+ p + 1 knots.

5|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

The open B-spline curve C(u) of degree p defined on the above constructed n+1 control points
and n+p+2 knots is a closed curve with Cp-1 continuity at the joining point C(u0) = C(un+1). Note that
the domain of this closed curve is [u0, un+1].

Example 3: P0, P1, P3, P4, P5; p = 3. Add P6 = P0.

Design uo, u1, u2, u3, u4, u5. Add p+2 knots, i.e. 5 more knots.

Starting Criteria un+1 = u0; u6 = u0; u7 = u1; u8 = u2; u9 = u3; u10 = u4. un+p+2 = up+1 (Closing Criteria).

6|P a ge
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Qs and As …

Thank you all!

7|P a ge
Lecture 19 - OE6980
B-Spline Different Forms and Properties - PART 4
___________________________________________________________________

R. Sharma
Professor,
Design and Simulation Laboratory,
Department of Ocean Engineering, IIT Madras, Chennai (TN) - 600 036, India.
E-mails: [email protected]
1|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- B-spline Curves: Knot Insertion

Knot insertion is adding a new knot into the existing knot vector without changing the shape of the
curve.

This new knot may be equal to an existing knot and, in this case, the multiplicity of that knot is
increased by one.

Because of the fundamental equality m = n + p + 1, after adding a new knot, the value of m is
increased by one and, consequently, either the number of control points or the degree of the curve
must also be increased by one.

Changing the degree of the curve due to the increase of knots will change the shape of the curve
globally and will not be considered.

Therefore, inserting a new knot causes a new control point to be added. In fact, some existing control
points are removed and replaced with new ones by corner cutting.

Although knot insertion looks like not very interesting, it is one of the most important algorithms for
B-spline curves since many other useful algorithms are based on knot insertion.

2|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Left figure below shows a clamped B-spline curve of degree 4 with uniform knots, while the right
figure shows the result after a new knot u = 0.5 is inserted.

Left figure also shows the control polylines before and after the insertion. Note shape of the curve
does not change. However, the defining control polyline is changed. In fact, four new control points
in red replace the original control points P4, P5 and P6.

- Inserting a Single Knot


Given a set of n+1 control points P0, P1, ..., Pn, a knot vector of m+1 knots U = { u0, u1, ..., um } and
a degree p, we want to insert a new knot t into the knot vector without changing the shape of the
B-spline curve C(u).

Suppose the new knot t lies in knot span [uk, uk+1). C(t) lies in the convex hull defined by control
points Pk, Pk-1, ..., Pk-p. Basis functions of all other control points are zero.
3|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

Thus, the knot insertion computation can be restricted on control points Pk, Pk-1, ..., Pk-p.

Inserting t is to find p new control points Qk on leg Pk-1Pk, Qk-1 on leg Pk-2Pk-1, ..., and Qk-p+1 on leg Pk-
pPk-p+1 such that the old polyline between Pk-p and Pk (in black below) is replaced by Pk-pQk-
p+1...QkPk (in orange below) by cutting the corners at Pk-p+1, ..., Pk-1.

All other control points are unchanged. Note that p-1 control points of the original control polyline
are removed and replaced with p new control points.

4|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- New control point Qi on leg Pi-1Pi is the following:

where the ratio ai is computed as below:

5|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- ai:1-ai is the ratio of dividing interval [ui, ui+p) by the value of t as shown below:

There are k ai's, each of which covers p knot spans (i.e., [ui, ui+p)). If we stack these intervals
together and align them at the value of t, we have the following diagram:

Therefore, the position of t divides knot spans [uk, uk+p), [uk-1, uk+p-1), ..., [uk-p+1, uk+1) into ratios ak, ak-
1, ...,, ak-p+1, which, in turn, provide the ratios for dividing legs PkPk-1, Pk-1Pk-2, ... Pk-pPk-p+1.

6|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Example 1: Inserting a Knot in a Knot Span

B-spline curve of degree 3 with a knot vector as follows:

u0 to u3 u4 u5 u6 u7 u8 to u11
0 0.2 0.4 0.6 0.8 1

We want to insert a new knot t = 0.5.

Since t = 0.5 lies in knot span [u5,u6), the affected control points are P5, P4, P3 and P2.

To determine the three new control points Q5, Q4 and Q3, we need to compute a5, a4 and a3 as
follows:

7|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Three new control points are:

New control polyline becomes P0, P1, P2, Q3, Q4, Q5, P5, ...., and the new knot vector is:

u0 to u3 u4 u5 u6 u7 u8 u9 to u12
0 0.2 0.4 0.5 0.6 0.8 1

Since the original B-spline curve has p = 3 and m = 11, we have n = m - p - 1 = 11 - 3 - 1 = 7 and
hence 8 control points.

8|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Following is a B-spline curve satisfying this condition and its basis functions:

- Three blue rectangles are Q3, Q4 and Q5. After inserting t = 0.5, the corners at P3 and P4 are cut,
yielding the following B-spline curve and its basis functions. Note that the shape of the curve does
not change:

9|P a ge
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Relationship between the old and new control points. Note that the new set of control points
contains P0, P1, P2, Q3, Q4, Q5, P5, P6 and P7.

- Relationship among aj's, uj's, and t are shown below:

10 | P a g e
B-Spline ………………….…………………………………….... Different Forms and Properties
______________________________________________________________________________

- Example 2: Inserting a Knot at an Existing Simple Knot

Knot vector as follows:

u0 to u4 u5 u6 u7 u8 u9 u10 u11 u12 to u16


0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1

Insert a new knot t = 0.5, which is equal to an existing one (i.e., t = u8 = 0.5). B-spline curve of degree
4 and its basis functions before the new knot t is inserted.

NOTE t is in [u8,u9), the affected control points are P8, P7, P6, P5 and P4.

11 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

Coefficients are computed as follows:

New control points are:

12 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

NOTE New control point Q8 is equal to the original control point P7. In fact, if t is equal to a knot,
say uk, then:

Consequently, we have

Guideline: If the new knot t to be inserted is equal to an existing simple knot uk, then Qk, the
last new control point, is equal to Pk-1.

Computation scheme:

13 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

Note that the new control points are P0, P1, P2, P3, P4, Q5, Q6, Q7, Q8 = P7, P8, P9, P10 and P11.
Curve and its basis functions after the new knot t = 0.5 is inserted are shown below.

Relationship among aj's, uj's, and t are shown below:

14 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

- Example 3: Inserting a Knot at an Existing Multiple Knot

What if the new knot t is inserted at a multiple knot?

Suppose t is inserted at knot uk of multiplicity s.

Hence, we have s consecutive equal knots: uk = uk-1 = uk-2 = .... = uk-s+1 and uk-s+1 being not equal
to uk-s.

In the computation of coefficients ak, ...., ak-p+1, we have the following:

15 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

- Hence, coefficients ak, ...., ak-p+1 are all zero and, consequently, we have:

- This shows that if the new knot t is inserted at a knot uk of multiplicity s, then the last s new
control points, Qk, Qk-1, ..., Qk-s+1 are equal to the original control points Pk-1, Pk-2, ..., Pk-s.

- If s = 1 (i.e., simple knot), Qk is equal to Pk-1, which is exactly what is discussed in Example 2.

- If s = 0 (i.e., t is not a knot), then all control points from Pk-p to Pk are involved.

This is the case of Example 1.

16 | P a g e
B-Spline ………………….………………………………………. Different Forms and Properties
______________________________________________________________________________

- Computation scheme:

17 | P a g e
B-Spline Basis Functions ………………...………….………………...….... Key Properties
______________________________________________________________________________

Qs and As …

Thank you all!

18 | P a g e

You might also like