Algorithm generates wrong results due to limits on double type
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 1.6k
- Forks
- 163
- PR merge metrics
- No merged PRs in 30d
Description
If you try to find the polylabel for the following polygon, it fails to find a good point.
-111.1815838, 45.7768091
-111.1816944, 45.7766950
-111.1812484, 45.7764847
-111.1811378, 45.7765988
It does not matter what precision you use. It does drill down to a point, but it is not right.
This is due to limitations in the double type.
The solution is to subtract the min of the bounding box before doing the remaining calculations, and then add it back at the end. This does seem to fix the problem in my tests, and shouldn't add much in execution time.
Also, it would also be best to calculate the bounding box for all rings to better avoid this problem.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the polylabel implementation and its bounding-box calculation, then reproduce the issue with the four-point polygon in the report. Verify the coordinate normalization avoids loss of precision and that bounding boxes account for all rings, while preserving the expected returned point.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100