deleteShallowConcavities method

bool deleteShallowConcavities()

Uses a sliding window containing 3 vertices to detect shallow angles in which the middle vertex can be deleted, since it does not affect the shape of the resulting buffer in a significant way. @return

Implementation

bool deleteShallowConcavities() {
  /**
   * Do not simplify end line segments of the line string.
   * This ensures that end caps are generated consistently.
   */
  int index = 1;

  int midIndex = findNextNonDeletedIndex(index);
  int lastIndex = findNextNonDeletedIndex(midIndex);

  bool isChanged = false;
  while (lastIndex < inputLine.length) {
    // test triple for shallow concavity
    bool isMiddleVertexDeleted = false;
    if (isDeletable(index, midIndex, lastIndex, distanceTol)) {
      isDeleted[midIndex] = DELETE;
      isMiddleVertexDeleted = true;
      isChanged = true;
    }
    // move simplification window forward
    if (isMiddleVertexDeleted)
      index = lastIndex;
    else
      index = midIndex;

    midIndex = findNextNonDeletedIndex(index);
    lastIndex = findNextNonDeletedIndex(midIndex);
  }
  return isChanged;
}