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