Add bound checks for bilinear interpolation #459
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.
Issue
Linear interpolation results in wrong values when queried position is near the map bounds.
I encountered this problem when trying to interpolate a value in a grid map of distance fields, where all values are positive. The result was negative, which didn't align with my expectations. Upon some digging, I noticed that the linear interpolater doesn't check if the intermediate positions are out of bounds, which result in strange behaviour.
Solution
Check that the interpolation points are within the grid map bounds.
Minimum working example
Outputs before the fix:
which is a negative value even though all values in the map are non-negative.
Output after the fix (it defers to nearest-neighbour):