Slide 1

Slide 1 text

jgs SER 431 Advanced Graphics Lecture 13: Curves, Splines, and Surfaces Javier Gonzalez-Sanchez [email protected] PERALTA 230U Office Hours: By appointment

Slide 2

Slide 2 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 2 jgs Surfaces

Slide 3

Slide 3 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 3 jgs Surfaces Can be represented by huge number of points (polygons or triangles) + arbitrary shapes possible – large memory requirements – changes cause much work – corners - scaling Can be represented by two sets of orthogonal curves – only for some shape categories + marginal memory requirements + changes are rather simple + definition arbitrarily exact 3

Slide 4

Slide 4 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 4 jgs Curves | Concept A curve is a generalization of a line (a set of points),

Slide 5

Slide 5 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 5 jgs Curves | Concept A curve is a generalization of a line (a set of points), in that its curvature need not be zero.

Slide 6

Slide 6 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 6 jgs Curves | Representation § Implicit curve. y = f(x) such as y = sqrt (1–x2) § Parametric curve. x = f(t), y = g(t) such as x=cos(t), y=sin(t)

Slide 7

Slide 7 text

jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 7 • Derivatives of the coordinates define the tangent • The length of the tangent does not have a geometric meaning. Consider only +, 0, -, and ∞ • From slope • To “rate of change” at any point (first derivative) Curves | First Derivative

Slide 8

Slide 8 text

jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 8 • Derivatives of the coordinates define the tangent • The length of the tangent does not have a geometric meaning. Consider only +, 0, -, and ∞ • From slope • To “rate of change” at any point (first derivative) Curves | First Derivative

Slide 9

Slide 9 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 9 jgs Curves | First Derivative The curvature is the inverse of the radius of the best local approximation of the curve by a circle. And, curvature is defined as the magnitude of the derivative of a unit tangent vector function with respect to arc length: Moreover, for small values curvature is approximately the second derivative.

Slide 10

Slide 10 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 10 jgs Curves | Second Derivative The second derivative measures the concavity § positive mean convex, i.e., tangent line below the graph (blue) § zero represents an inflection point (red) § negative mean concave, i.e., tangent line above the graph (green)

Slide 11

Slide 11 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 11 jgs Spline Functions A curve can be defined piecewise by polynomials (spline functions) § Interpolating splines § Approximating splines 11

Slide 12

Slide 12 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 12 jgs Curves and Splines § A curve can be a concatenation of splines. § Control points determine the shape of the spline curve. § For each point specify a blending function which determines how the control point influence the shape of the curve for values of parameter t. § Therefore, a curve spline is specified as P(t) = p0 *B0 (t) + p1 *B1 (t) + p2 *B2 (t) + p3 *B3 (t) + ... § This is axis independent, i.e., it does not change when the coordinate system is rotated. 12

Slide 13

Slide 13 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 13 jgs § A control graph (or control polygon) is a poly-line connecting control points. § It shows the order of control points Control Graph 13

Slide 14

Slide 14 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 14 jgs Blending functions | Example Bezier Blending function are: § Easy to compute (polynomials are) § Continuous § Interpolate nicely the control points Example (Bezier blending function): § Define 4 control points § Define t between 0 and 1 § Blending function are defined as B0 (t)=(1-t)3, B1 (t)=3t(1-t)2, B2 (t)=3t2(1-t), B1 (t)=(t)3

Slide 15

Slide 15 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 15 jgs Blending functions | Example Bezier Blending function are: § Easy to compute (polynomials are) § Continuous § Interpolate nicely the control points Example (Bezier blending function): § Define 4 control points § Define t between 0 and 1 § Blending function are defined as B0 (t)=(1-t)3, B1 (t)=3t(1-t)2, B2 (t)=3t2(1-t), B1 (t)=(t)3

Slide 16

Slide 16 text

jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 16 Thus, with 4 points and the Bezier blending functions, we replace • P(t) = p0 *B0 (t) + p1 *B1 (t) + p2 *B2 (t) + p3 *B3 (t) With P(t) = (1-t)3 P0 + 3t(1-t)2 P1 + 3t2(1-t) P2 + (t)3 P3 Where t is 0 <= t < = 1

Slide 17

Slide 17 text

jgs Source Code

Slide 18

Slide 18 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 18 jgs Step 1 // 4 control points float Points[4][3] = { { 10, 0, 0 }, { 5, 10, 2 }, { -5, 0, 0 }, {-10, 5, -2 } }; P3 P0 P1 P2

Slide 19

Slide 19 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 19 jgs Step 2 // draw the control vertices in red. // It is only as a reference. They are not need on screen. Ok? glColor3f(1, 0, 0); glPointSize(3); glBegin(GL_POINTS); for (int i = 0; i != 4; ++i) { glVertex3fv(Points[i]); } glEnd(); P3 P0 P1 P2

Slide 20

Slide 20 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 20 jgs Step 3 // control graph in blue glColor3f(0, 0, 1); glBegin(GL_LINE_STRIP); for (int i = 0; i != 4; ++i) { glVertex3fv(Points[i]); } glEnd(); P3 P0 P1 P2

Slide 21

Slide 21 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 21 jgs Step 4 glBegin(GL_LINE_STRIP); glColor3f(0, 1, 0); // N = 20 for (int i = 0; i != N; ++i) { float t = (float) i / (N - 1); // 20 values 0 to 1 float it = 1.0f - t; // blending functions float b0 = t*t*t; //(t)3 for P3 float b1 = 3 * t * t * it; // 3t2(1-t) for P2 float b2 = 3 * t * it*it; // 3t(1-t)2 for P1 float b3 = it*it*it; //(1-t)3 for P0 // P(t) = (1-t)3 P0 + 3t(1-t)2 P1 + 3t2(1-t) P2 + (t)3 P3 float x = b3 * Points[0][0] + b2 * Points[1][0] + b1 * Points[2][0] + b0 * Points[3][0]; float y = b3 * Points[0][1] + b2 * Points[1][1] + b1 * Points[2][1] + b0 * Points[3][1]; float z = b3 * Points[0][2] + b2 * Points[1][2] + b1 * Points[2][2] + b0 * Points[3][2]; // specify the point glVertex3f(x, y, z); } glEnd();

Slide 22

Slide 22 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 22 jgs Examples N = 20 N = 5 N = 2

Slide 23

Slide 23 text

Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 23 jgs § Review the source code posted on GitHub Test yourselves: § Change the coordinates of the control points; for instance, play with diverse combinations of positive and negative x and y. § Draw a second Bezier spline adjacent to the first one § Draw a second Bezier spline parallel to the first one Homework

Slide 24

Slide 24 text

jgs SER431 Advanced Graphics Javier Gonzalez-Sanchez [email protected] Fall 2018 Disclaimer. These slides can only be used as study material for the class SER431 at ASU. They cannot be distributed or used for another purpose.