in commons-geometry-spherical/src/main/java/org/apache/commons/geometry/spherical/twod/ConvexArea2S.java [397:437]
private static Vector3D computeTriangleFanWeightedCentroidVector(final List<GreatArc> arcs) {
final Iterator<GreatArc> arcIt = arcs.iterator();
final Point2S p0 = arcIt.next().getStartPoint();
final Vector3D.Unit v0 = p0.getVector();
final Vector3D.Sum areaCentroid = Vector3D.Sum.create();
GreatArc arc;
Point2S p1;
Point2S p2;
Vector3D.Unit v1;
Vector3D.Unit v2;
Vector3D.Unit triangleCentroid;
double triangleCentroidLen;
while (arcIt.hasNext()) {
arc = arcIt.next();
if (!arc.contains(p0)) {
p1 = arc.getStartPoint();
p2 = arc.getEndPoint();
v1 = p1.getVector();
v2 = p2.getVector();
triangleCentroid = Vector3D.Sum.create()
.add(v0)
.add(v1)
.add(v2)
.get().normalize();
triangleCentroidLen =
computeArcCentroidContribution(v0, v1, triangleCentroid) +
computeArcCentroidContribution(v1, v2, triangleCentroid) +
computeArcCentroidContribution(v2, v0, triangleCentroid);
areaCentroid.addScaled(triangleCentroidLen, triangleCentroid);
}
}
return areaCentroid.get();
}