1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.geometry.euclidean.threed;
18
19 import java.util.Arrays;
20 import java.util.List;
21
22 import org.apache.commons.geometry.core.Transform;
23
24
25
26
27
28 final class SimpleTriangle3D extends AbstractConvexPolygon3D implements Triangle3D {
29
30
31 private final Vector3D p1;
32
33
34 private final Vector3D p2;
35
36
37 private final Vector3D p3;
38
39
40
41
42
43
44
45
46 SimpleTriangle3D(final Plane plane, final Vector3D p1, final Vector3D p2, final Vector3D p3) {
47 super(plane);
48
49 this.p1 = p1;
50 this.p2 = p2;
51 this.p3 = p3;
52 }
53
54
55 @Override
56 public Vector3D getPoint1() {
57 return p1;
58 }
59
60
61 @Override
62 public Vector3D getPoint2() {
63 return p2;
64 }
65
66
67 @Override
68 public Vector3D getPoint3() {
69 return p3;
70 }
71
72
73 @Override
74 public List<Vector3D> getVertices() {
75 return Arrays.asList(p1, p2, p3);
76 }
77
78
79 @Override
80 public double getSize() {
81 final Vector3D v1 = p1.vectorTo(p2);
82 final Vector3D v2 = p1.vectorTo(p3);
83 return 0.5 * v1.cross(v2).norm();
84 }
85
86
87 @Override
88 public Vector3D getCentroid() {
89 return Vector3D.centroid(p1, p2, p3);
90 }
91
92
93 @Override
94 public SimpleTriangle3D reverse() {
95 final Plane rPlane = getPlane().reverse();
96
97 return new SimpleTriangle3D(rPlane, p1, p3, p2);
98 }
99
100
101 @Override
102 public SimpleTriangle3D transform(final Transform<Vector3D> transform) {
103 final Plane tPlane = getPlane().transform(transform);
104 final Vector3D t1 = transform.apply(p1);
105 final Vector3D t2 = transform.apply(p2);
106 final Vector3D t3 = transform.apply(p3);
107
108 return new SimpleTriangle3D(tPlane, t1, t2, t3);
109 }
110 }