1. Implement smooth curve interpolation in 3D.
- - Start from the file http://www.cs.berkeley.edu/~sequin/CS284/CODE/pa2.slf
- - Write the corresponding formulas for
the z-components of the inner Bézier control points.
- - Add the necessary z-expressions in
all places where I have not already done so.
- - I have added a "Z-scale" slider that
multiplies all the new z-coordinates with a slider-controlled constant,
so that you
can readily go back and forth between 2D (multiplier=0.0) and 3D (multiplier=1.0).
- - Lift the data points out of the x-y-plane,
and convince yourself that everything still "works smoothly in 3D."
2. Use the SLIDE "sweep" construct to form a small ribbon
going along a closed B-spline curve approximating the original 15 control
points.
- - This can be done by sweeping a "star"
type cross section, and giving the star TWO skinny spokes.
- - I have already put in most of the needed
code; if you turn on "drawSweep" in the "slf_swp" slider menu,
you should
see such a ribbon in red, displayed edge-on.
- - However, the ribbon seems to have 10
pinched-off, twisted points in its loop; -- WHY is this ? -- Write down your
thoughts!
- - Under what conditions do you get a
nice "prismatic" sweep with no funny points ?
- - How do you have to set parameters such
as : "minimizeTorsion" "closed (curve)" "symmetry" "azimuth" ...
in order
to achieve a nice result ?
See manual
pages on SLIDE !
- - Now lift the original control points
out of the x-y-plane by increasing the "Z-scale" slider in the "slf_bez" slider menu..
- - How is the behavior of the sweep different
now ?
- - Pay particular attention to the end
condition where the loop closes; under what circumstances do you get a
smooth, seamless closure ?
- - Answer the same questions also for
a 5-pointed star (set "Spokes" to 5).
ATTENTION: -- the "closed" flag does not seem to work
when set dynamically:
closed {expr $oSweep(closed)}
but will work when set explicitly in the SLIDE
file, either as:
closed 0
or:
closed 1
Do this before TUESDAY, 9/11/2012 so you can ask questions and resolve issues for the remainder of this assignment.
3. Now try to make such a nice sweep along your own
smooth, composite, interpolating curve.
- - It is somewhat tedious, since you have
to specify a separate sweep construct for each of the 15 Bézier segments.
- - But again, the code is already in place,
and you can see such a ribbon in green, if you turn on "drawSweep" in the
"slf_bez" menu.
- - (You may now want to turn off the B-spline
at this time, so that you can focus on the Bézier segments.)
- - For a 2D curve, as long as the ribbon
is perpendicular to the curve's plane, everything should work fairly nicely.
- - But there may be problems in 3D. --
WHY ? What can you do about them ?
>>> Just discuss the issues you encounter in
the 3D case. Find out what "hooks" are or are not available in the SLIDE
sweep.
Briefly summarize what would have to be done
to make nice prismatic sweeps along a composite Bézier curve in 3D,
and how the necessary information may be computed.
No need to actually do all the programming -- unless you want to.
4. Now use all the originally given points, as well
as your own calculated control points,
to make a closed polyline with 45
joints, and then sweep a 5-pointed star along that polyline.
- - The code for this is right next to
the B-spline "backbone" code (near line 483 in pa2.slf).
- - Under what conditions do you get nice
prismatic beams with nicely mitered joints ?
- - How do you have to set parameters such
as : "azimuth", "twist", "minimize Torsion", "closed (curve)", "symmetry" ...
in order
to achieve a nice result ?
- - Can the "twist" parameter be of any
use in achieving nice, properly mitred joints ? HOW ?
>>> Implement the sweep for the polyline case.
The SLIDE machinery should handle all that.
DUE: Thursday 9/13/2012, 2:40pm.
Set the initial values for the sliders to the proper values,
so that when your program is run,
one will see a nice "prismatic" sweep of a 3-pointed star along
your best composite Bézier curve.
(You may want to change some of the parameters from the values
that you gave them in pa1.slf)
>>> Without the implementation of (3), this will
not work well in 3D.
But the 2D case is much simpler. You should be
able to get nice results for the 2D case.
Capture a hardcopy print-out of this sweep.
Hand in at the beginning of class (Thursday 9/13/2012, 2:40pm):