in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/internal/EuclideanUtils.java [91:129]
private static int findBestTriangleFanIndex(final List<Vector3D> vertices) {
final Iterator<Vector3D> it = vertices.iterator();
Vector3D curPt = it.next();
Vector3D nextPt;
final Vector3D lastVec = vertices.get(vertices.size() - 1).directionTo(curPt);
Vector3D incomingVec = lastVec;
Vector3D outgoingVec;
int bestIdx = 0;
double bestDot = -1.0;
int idx = 0;
double dot;
while (it.hasNext()) {
nextPt = it.next();
outgoingVec = curPt.directionTo(nextPt);
dot = incomingVec.dot(outgoingVec);
if (dot > bestDot) {
bestIdx = idx;
bestDot = dot;
}
curPt = nextPt;
incomingVec = outgoingVec;
++idx;
}
// handle the last vertex on its own
dot = incomingVec.dot(lastVec);
if (dot > bestDot) {
bestIdx = idx;
}
return bestIdx;
}