Add Orientation Index Viewer utility #1234
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The Point-Line Orientation geometric predicate is probably the most crucial algorithm in GEOS, since it is used in many other algorithms, and is notorious for causing robustness problems. GEOS has a high-quality implementation which continues to be improved (e.g. see #1184).
Even with a state-of-the-art robust implementation, the orientation predicate behaviour for floating-point inputs can be puzzling (e.g. see #1207, and extensive discussion on #1184). To assist in understanding its characteristics, and to allow confirming expected behaviour, this PR provides a utility to compute the orientation index for particular cases, and to visualize its behaviour.
Example
The case in #1207 can be visualized using:
The output shows:
Permutations of Input
The viewer can compute all permutations of the three input points, to visualize whether the orientation computation is consistent. In the example case, this shows that the DD implementation is consistent, whereas the FP implementation is not.