findRightmostEdgeAtVertex method
void
findRightmostEdgeAtVertex()
Implementation
void findRightmostEdgeAtVertex() {
/**
* The rightmost point is an interior vertex, so it has a segment on either side of it.
* If these segments are both above or below the rightmost point, we need to
* determine their relative orientation to decide which is rightmost.
*/
List<Coordinate> pts = minDe!.getEdge().getCoordinates();
Assert.isTrue(minIndex > 0 && minIndex < pts.length,
"rightmost point expected to be interior vertex of edge");
Coordinate pPrev = pts[minIndex - 1];
Coordinate pNext = pts[minIndex + 1];
int orientation = Orientation.index(minCoord!, pNext, pPrev);
bool usePrev = false;
// both segments are below min point
if (pPrev.y < minCoord!.y &&
pNext.y < minCoord!.y &&
orientation == Orientation.COUNTERCLOCKWISE) {
usePrev = true;
} else if (pPrev.y > minCoord!.y &&
pNext.y > minCoord!.y &&
orientation == Orientation.CLOCKWISE) {
usePrev = true;
}
// if both segments are on the same side, do nothing - either is safe
// to select as a rightmost segment
if (usePrev) {
minIndex = minIndex - 1;
}
}