001/*
002
003*/
004
005package renderer.models;
006import  renderer.scene.*;
007
008/**
009   Create a wireframe model of a cube with its center
010   at the origin, having edge length 2, and with its
011   vertices at {@code (±1, ±1, ±1)}.
012<p>
013   Here is a picture showing how the cube's eight vertices
014   are labeled.
015<pre>{@code
016                  v[4]
017                   +-----------------+ v[5]
018                  /|                /|
019                /  |              /  |
020              /    |            /    |
021            /      |          /      |
022      v[7] +-----------------+ v[6]  |
023           |       |         |       |               y
024           |       |         |       |               |
025           |       |         |       |               |
026           |  v[0] +---------|-------+ v[1]          |
027           |      /          |      /                |
028           |    /            |    /                  +----. x
029           |  /              |  /                   /
030           |/                |/                    /
031           +-----------------+                    /
032          v[3]              v[2]                 z
033}</pre>
034
035   @see Tetrahedron
036   @see Octahedron
037   @see Icosahedron
038   @see Dodecahedron
039*/
040public class Cube extends Model
041{
042   /**
043      Create a cube with its center at the origin, having edge
044      length 2, and with its vertices at {@code (±1, ±1, ±1)}.
045   */
046   public Cube( )
047   {
048      super();
049
050      // Create the cube's geometry.
051      Vertex[] v = new Vertex[8];
052      v[0] = new Vertex(-1, -1, -1); // four vertices around the bottom face
053      v[1] = new Vertex( 1, -1, -1);
054      v[2] = new Vertex( 1, -1,  1);
055      v[3] = new Vertex(-1, -1,  1);
056      v[4] = new Vertex(-1,  1, -1); // four vertices around the top face
057      v[5] = new Vertex( 1,  1, -1);
058      v[6] = new Vertex( 1,  1,  1);
059      v[7] = new Vertex(-1,  1,  1);
060
061      // Create 12 line segments
062      // bottom face
063      addLineSegment(new LineSegment(new Vertex(v[0]), new Vertex(v[1])));
064      addLineSegment(new LineSegment(new Vertex(v[1]), new Vertex(v[2])));
065      addLineSegment(new LineSegment(new Vertex(v[2]), new Vertex(v[3])));
066      addLineSegment(new LineSegment(new Vertex(v[3]), new Vertex(v[0])));
067      // top face
068      addLineSegment(new LineSegment(new Vertex(v[4]), new Vertex(v[5])));
069      addLineSegment(new LineSegment(new Vertex(v[5]), new Vertex(v[6])));
070      addLineSegment(new LineSegment(new Vertex(v[6]), new Vertex(v[7])));
071      addLineSegment(new LineSegment(new Vertex(v[7]), new Vertex(v[4])));
072      // back face
073      addLineSegment(new LineSegment(new Vertex(v[0]), new Vertex(v[4])));
074      addLineSegment(new LineSegment(new Vertex(v[1]), new Vertex(v[5])));
075      // front face
076      addLineSegment(new LineSegment(new Vertex(v[3]), new Vertex(v[7])));
077      addLineSegment(new LineSegment(new Vertex(v[2]), new Vertex(v[6])));
078   }
079}//Cube