Composition
1. If a class X
is a composition of a Y
, then
each X
object contains a Y
object. One reason for
using composition is so that the X
object can use the
Y
object to do some work. An example of this is the
Die
class from the Week 1 lab; each Die
object
is a compositon of a java.util.Random
object; a die uses its
own random number generator to produce random rolls. In this example,
there are no accessors or mutators for the random number generator,
so defensive copying is not needed.
Implement the Die
class
(API is here) ignoring the constructor with signature Die(int, Random)
(it is there for testing purposes).
2. Three-dimensional computer models of shapes are often represented as a collection of triangles. In addition to the three points of the triangles, it is common to store a normal vector associated with the triangle. The normal vector indicates the direction perpendicular to a surface; for a triangle, the normal vector is the normal vector of the plane containing the triangle. Usually, the unit normal vector is desired (the normal vector having magnitude equal to 1).
For a triangle have points a
, b
, and c
,
the normal vector N
can be computed as the cross product
N = (b - a) × (c - a)
. The unit normal vector n
can then
be computed as n = N / | N |
where | N |
is the
magnitude of N
.
Change the Triangle
class from the lectures to include a
unit normal vector. The normal vector should be computed inside a constructor
and stored as a separate Point
object.
1. Implement the type.lib.CreditCard
class from CSE1020
(API is here). Be sure to use composition on the Date
objects (otherwise clients can directly change the issue and expiry dates).
3. Another old practice labtest.
1. 3D printing is rapidly becoming a common method of manufacturing customized solid parts. To produce a part using 3D printing, a computer model of the part is required. A common file format for storing the model is the STL (stereolithography, or standard tessellation language) file format. The STL file essentially contains a list of triangles where each triangle is has a normal vector and three points.
Do some research to learn the structure of an ASCII (text) STL file. Then create a class
called StlReader
that can read an STL file and make the list of triangles available to a client.
Your class should provide a method that allows the client to set different file names
so that different STL files can be read without having to create a new StlReader
object. If a client uses an StlReader
object to read in a file,
asks for the list of triangles, and reads in a different file, then the client's list
of triangles should not change when the second file is read.
As part of my research, I have used 3D printing to produce patient specific guides
for surgical navigation. On the left is an image of a computer model of a
patient guide for wrist surgery, and on the right is the 3D printed guide placed
on a plastic bone (the radius bone of the forearm). Click here
if you want to see an image of a 3D printed guide in surgery (warning: picture
is of an actual surgery; do not click if you are squeamish).