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