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;
  }
}