Blossoms CS 419 Advanced Topics in Computer Graphics John C. Hart Borrowed somewhat from Tom Sederberg’s notes
p 1 de Casteljau p 12 p 2 p 012 1- t • de Casteljau algorithm p 123 p 0123 evaluates a point on a p 01 Bezier curve by t scaffolding lerps p 23 • Blossoming renames the p 0 control and intermediate p 3 points, like p 12 , using a polar form, like p (0, t ,1)
p (1,0,0) de Casteljau p 12 p (1,1,0) p 012 1- t • de Casteljau algorithm p 123 p 0123 evaluates a point on a p 01 Bezier curve by t scaffolding lerps p 23 • Blossoming renames the p (0,0,0) control and intermediate p (1,1,1) points, like p 12 , using a polar form, like p (0, t ,1)
p (1,0,0) de Casteljau p (1, t ,0) p (1,1,0) p 012 1- t • de Casteljau algorithm p 123 p 0123 evaluates a point on a p ( t ,0,0) Bezier curve by t p (1,1, t ) scaffolding lerps • Blossoming renames the p (0,0,0) control and intermediate p (1,1,1) points, like p 12 , using a polar form, like p (0, t ,1)
p (1,0,0) de Casteljau p (1, t ,0) p (1,1,0) p ( t , t ,0) 1- t • de Casteljau algorithm p (1, t , t ) p 0123 evaluates a point on a p ( t ,0,0) Bezier curve by t p (1,1, t ) scaffolding lerps • Blossoming renames the p (0,0,0) control and intermediate p (1,1,1) points, like p 12 , using a polar form, like p (0, t ,1)
p (1,0,0) de Casteljau p (1, t ,0) p (1,1,0) p ( t , t ,0) 1- t • de Casteljau algorithm p (1, t , t ) evaluates a point on a p ( t , t , t ) p ( t ,0,0) Bezier curve by t p (1,1, t ) scaffolding lerps • Blossoming renames the p (0,0,0) control and intermediate p (1,1,1) points, like p 12 , using a polar form, like p (0, t ,1)
p (1,0,0) Blossoming Rules p (1, t ,0) p (1,1,0) p ( t , t ,0) 1- t • # of parameters = degree p (1, t , t ) • Order doesn’t matter p ( t , t , t ) p ( t ,0,0) p ( a , b , c ) = p ( b , a , c ) t p (1,1, t ) • Linear in any parameter p (0,0,0) a p ( a , b , c ) = p ( a a , b , c ) = p ( a , a b , c ) p (1,1,1) p ( a , b + c , d ) = p ( a , b , d ) + p ( a , c , d ) • Lerping: (1- t ) p (0,0,0) + t p (1,0,0) = p (0 (1- t ),0,0) + p (1 t ,0,0) = p (0 (1- t ) + 1 t ,0,0) = p ( t ,0,0)
p (1,0,0) Evaluation p (1, t ,0) p (1,1,0) p ( t , t ,0) 1- t • Goal is to find p ( t ) by p (1, t , t ) diagonalization, by p ( t , t , t ) p ( t ,0,0) manipulating blossoms t p (1,1, t ) into p ( t , t , t ) • de Casteljau algorithm blossoms p (0,0,0) into Bernstein polynomials p (1,1,1) p ( t ) = p ( t , t , t ) = (1- t ) p ( t , t ,0) + t p ( t , t ,1) = (1- t )[(1-t) p ( t ,0,0) + t p ( t ,0,1)] + t [(1- t ) p ( t ,0,1) + t p ( t ,1,1)] = (1- t ) 2 p ( t ,0,0) + 2 (1- t ) t p ( t ,0,1) + t 2 p ( t ,1,1) = (1- t ) 2 [(1- t ) p (0,0,0)+ t p (1,0,0)] +2 (1- t ) t [(1- t ) p (0,0,1)+ t p (1,0,1)] + t 2 [(1- t ) p (0,1,1)+ t p (1,1,1)] = (1- t ) 3 p (0,0,0) + 3 (1- t ) 2 t p (0,0,1) + 3 (1- t ) t 2 p (0,1,1) + t 3 p (1,1,1)
B-Spline Blossoms • Three segments: [2,3],[3,4],[4,5] p (2,3,4) p (3,4,5) • Points within each segment influenced by four surrounding t =3 t =4 control points p (1,2,3) • Knots influenced by three p (4,5,6) t =2 t =5 surrounding control points • Need two extra knots at each end of knot vector p (0,1,2) p (5,6,7) (in general, d -1 extra knots at each end) knot vector: [0 1 2 3 4 5 6 7]
Bohm Blossoms • Trick: Think of each segment p (2,3,4) p (3,4,5) as a Bezier curve t =3 t =4 p (1,2,3) p (4,5,6) t =2 t =5 p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Bohm Blossoms • Trick: Think of each segment p (2,3,4) p (3,4,5) as a Bezier curve p (3,3,3) p (4,4,4) p (1,2,3) p (4,5,6) p (2,2,2) p (5,5,5) p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Bohm Blossoms • Trick: Think of each segment p (2,3,4) p (3,4,5) as a Bezier curve • Where should the other p (3,3,3) two control points go p (1,2,3) for the [2,3] segment? p (4,5,6) p (2,2,2) p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Bohm Blossoms • Trick: Think of each segment p (4,2,3) p (3,4,5) as a Bezier curve • Where should the other p (3,2,3) p (3,3,3) p (2,2,3) two control points go p (1,2,3) for the [2,3] segment? p (4,5,6) p (2,2,2) • Need to find: p (2,2,3) = 2/3 p (1,2,3) + 1/3 p (4,2,3) p (0,1,2) p (3,2,3) = 1/3 p (1,2,3) + 2/3 p (4,2,3) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Bohm Blossoms • Where are the endpoints located? p (3,4,2) p (3,4,3) p (3,4,5) • Need to find: p (3,2,3) p (3,3,3) p (2,1,2) = 1/3 p (0,1,2) + 2/3 p (3,1,2) p (2,3,2) p (3,4,3) = 2/3 p (3,4,2) + 1/3 p (3,4,5) p (3,1,2) p (2,2,2) p (2,2,2) = 1/2 p (2,1,2) + 1/2 p (2,3,2) p (2,1,2) p (3,3,3) = 1/2 p (3,2,3) + 1/2 p (3,4,3) p (0,1,2) • Reveals how to turn a B-spline into a Bezier curve! knot vector: [0 1 2 3 4 5 6 7]
Knot Insertion • Suppose we want to add a p (2,3,4) p (3,4,5) knot at t = 3.5 t =3 t =4 p (1,2,3) p (4,5,6) t =2 t =5 p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Knot Insertion • Suppose we want to add a p (3,3.5,4) p (2,3,4) p (3,4,5) knot at t = 3.5 p (3.5,4,5) p (2,3,3.5) • Then we need new cp’s t =3 t =4 p (2,3,3.5), p (3,3.5,4) p (1,2,3) and p (3.5,4,5) p (4,5,6) t =2 t =5 and can get rid of p (2,3,4) and p (3,4,5) p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 4 5 6 7]
Knot Insertion • Suppose we want to add a p (3,3.5,4) knot at t = 3.5 p (3.5,4,5) p (2,3,3.5) • Then we need new cp’s t =3.5 p (2,3,3.5), p (3,3.5,4) p (1,2,3) and p (3.5,4,5) p (4,5,6) t =2 t =5 and can get rid of p (2,3,4) and p (3,4,5) p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 3.5 4 5 6 7]
de Boor Algorithm • What if we want to p (3,3.5,4) evaluate p (3.5)? p (3.5,4,5) p (2,3,3.5) • Then create a triple knot t =3.5 at t = 3.5 and figure out p (1,2,3) where to put the control p (4,5,6) t =2 t =5 point p (3.5,3.5,3.5) p (0,1,2) p (5,6,7) knot vector: [0 1 2 3 3.5 4 5 6 7]
de Boor Algorithm • What if we want to p (3,3.5,4) p (3.5,3.5,4) p (3,3.5,3.5) evaluate p (3.5)? p (3.5,4,5) p (2,3,3.5) • Then create a triple knot p (3.5,3.5,3.5) at t = 3.5 and figure out p (1,2,3) where to put the control p (4,5,6) point p (3.5,3.5,3.5) • Need p (3,3.5,3.5) and p (3.5,3.5,4) p (0,1,2) p (5,6,7) • Also subdivides B-spline into [0,1,2,3,3.5,3.5,3.5] and [3.5,3.5,3.5,4,5,6,7] knot vector: [0 1 2 3 3.5 3.5 3.5 4 5 6 7]
Recommend
More recommend