|
5 | 5 |
|
6 | 6 | public class TriakisTetrahedronCreator implements IMeshCreator { |
7 | 7 |
|
8 | | - private float a = 5f / 3f; |
| 8 | + /** |
| 9 | + * Scale factor for tetrahedron vertices so that the resulting triakis tetrahedron has symmetric |
| 10 | + * (congruent) faces. |
| 11 | + */ |
| 12 | + private static final float DEFAULT_TRIAKIS_TETRAHEDRON_SCALE = 5f / 3f; |
9 | 13 |
|
10 | | - private Mesh3D mesh; |
| 14 | + private float scale; |
11 | 15 |
|
12 | | - @Override |
13 | | - public Mesh3D create() { |
14 | | - initializeMesh(); |
15 | | - createVertices(); |
16 | | - createFaces(); |
17 | | - return mesh; |
18 | | - } |
| 16 | + private Mesh3D mesh; |
19 | 17 |
|
20 | | - private void createVertices() { |
21 | | - createTetrahedronVertices(); |
22 | | - createMidEdgeVertices(); |
23 | | - } |
| 18 | + public TriakisTetrahedronCreator() { |
| 19 | + this(DEFAULT_TRIAKIS_TETRAHEDRON_SCALE); |
| 20 | + } |
24 | 21 |
|
25 | | - private void createTetrahedronVertices() { |
26 | | - addVertex(a, a, a); |
27 | | - addVertex(a, -a, -a); |
28 | | - addVertex(-a, -a, a); |
29 | | - addVertex(-a, a, -a); |
30 | | - } |
| 22 | + public TriakisTetrahedronCreator(float scale) { |
| 23 | + this.scale = scale; |
| 24 | + } |
31 | 25 |
|
32 | | - private void createMidEdgeVertices() { |
33 | | - addVertex(1, -1, 1); |
34 | | - addVertex(-1, 1, 1); |
35 | | - addVertex(1, 1, -1); |
36 | | - addVertex(-1, -1, -1); |
37 | | - } |
| 26 | + @Override |
| 27 | + public Mesh3D create() { |
| 28 | + initializeMesh(); |
| 29 | + createVertices(); |
| 30 | + createFaces(); |
| 31 | + return mesh; |
| 32 | + } |
38 | 33 |
|
39 | | - public void createFaces() { |
40 | | - addFace(4, 0, 5); |
41 | | - addFace(6, 1, 7); |
42 | | - addFace(2, 4, 5); |
43 | | - addFace(3, 6, 7); |
44 | | - addFace(5, 0, 6); |
45 | | - addFace(1, 4, 7); |
46 | | - addFace(4, 2, 7); |
47 | | - addFace(3, 5, 6); |
48 | | - addFace(0, 4, 6); |
49 | | - addFace(4, 1, 6); |
50 | | - addFace(2, 5, 7); |
51 | | - addFace(5, 3, 7); |
52 | | - } |
| 34 | + private void createVertices() { |
| 35 | + createTetrahedronVertices(); |
| 36 | + createInnerVertices(); |
| 37 | + } |
53 | 38 |
|
54 | | - private void initializeMesh() { |
55 | | - mesh = new Mesh3D(); |
56 | | - } |
| 39 | + private void createTetrahedronVertices() { |
| 40 | + addVertex(scale, scale, scale); |
| 41 | + addVertex(scale, -scale, -scale); |
| 42 | + addVertex(-scale, -scale, scale); |
| 43 | + addVertex(-scale, scale, -scale); |
| 44 | + } |
57 | 45 |
|
58 | | - private void addVertex(float x, float y, float z) { |
59 | | - mesh.addVertex(x, y, z); |
60 | | - } |
| 46 | + private void createInnerVertices() { |
| 47 | + addVertex(1, -1, 1); |
| 48 | + addVertex(-1, 1, 1); |
| 49 | + addVertex(1, 1, -1); |
| 50 | + addVertex(-1, -1, -1); |
| 51 | + } |
61 | 52 |
|
62 | | - private void addFace(int... indices) { |
63 | | - mesh.addFace(indices); |
64 | | - } |
| 53 | + public void createFaces() { |
| 54 | + addFace(4, 0, 5); |
| 55 | + addFace(6, 1, 7); |
| 56 | + addFace(2, 4, 5); |
| 57 | + addFace(3, 6, 7); |
| 58 | + addFace(5, 0, 6); |
| 59 | + addFace(1, 4, 7); |
| 60 | + addFace(4, 2, 7); |
| 61 | + addFace(3, 5, 6); |
| 62 | + addFace(0, 4, 6); |
| 63 | + addFace(4, 1, 6); |
| 64 | + addFace(2, 5, 7); |
| 65 | + addFace(5, 3, 7); |
| 66 | + } |
65 | 67 |
|
| 68 | + private void initializeMesh() { |
| 69 | + mesh = new Mesh3D(); |
| 70 | + } |
| 71 | + |
| 72 | + private void addVertex(float x, float y, float z) { |
| 73 | + mesh.addVertex(x, y, z); |
| 74 | + } |
| 75 | + |
| 76 | + private void addFace(int... indices) { |
| 77 | + mesh.addFace(indices); |
| 78 | + } |
66 | 79 | } |
0 commit comments