Node: Rectangles Getstart, Next: Ellipses Getstart, Previous: Regular Polygons Getstart, Up: Plane Figures
A Rectangle
can be constructed in the x-z plane by specifying a
center Point
, the width, and the height:
Rectangle r(origin, 2, 3); r.draw();
Fig. 27.
Three additional arguments can be used to specify rotation about the x, y, and z-axes respectively:
Rectangle r(origin, 2, 3, 30, 45, 15); r.draw();
Fig. 28.
If a Point
p other than the origin is specified as the center of
the Rectangle
, the latter is first created in the x-z plane,
centered about the origin, as above. Then, any rotations specified are
performed. Finally, the Rectangle
is shifted such that its center
comes to lie at p:
Point p0(.5, 1, 3); Rectangle r(p0, 4, 2, 30, 30, 30); r.draw();
Fig. 29.
This constructor has a corresponding setting function:
Rectangle r; for (int i = 0; i < 180; i += 30) { r.set(origin, 4, 2, i); r.draw(); }
Fig. 30.
Rectangles
can also be specified using four Points
as
arguments, whereby they must be ordered so that they are contiguous in
the resulting Rectangle
:
Point pt[4]; pt[0].shift(-1, -2); pt[2] = pt[1] = pt[0]; pt[1].rotate(180); pt[3] = pt[1]; pt[2] *= pt[3].rotate(0, 180); Rectangle r(pt[0], pt[2], pt[3], pt[1]); r.draw();
Fig. 31.
This constructor checks whether the Point
arguments are coplanar,
however, it does not check whether they are really the corners of a
valid rectangle; the user, or the code that calls this function, must
ensure that they are. In the following
example, r
, although not rectangular, is a Rectangle
, as
far as 3DLDF is concerned:
pt[0].shift(0, -1); pt[3].shift(0, 1); Rectangle q(pt[0], pt[2], pt[3], pt[1]); q.draw();
Fig. 32.
This constructor is not really intended to be used directly, but should
mostly be called from within other functions, that should ensure that
the arguments produce a rectangular Rectangle
. There is also no
guarantee that transformations or other functions called on
Rectangle
, Circle
, or other classes representing
geometric figures won't cause them to become non-rectangular,
non-circular, or otherwise irregular. Sometimes, this might even be
desirable. I plan to add the function
Rectangle::is_rectangular()
soon, so that users can test
Rectangles
for rectangularity.