Add Rotating Calipers algorithm for convex polygon diameter - #15275
Open
Clear20-22 wants to merge 4 commits into
Open
Add Rotating Calipers algorithm for convex polygon diameter#15275Clear20-22 wants to merge 4 commits into
Clear20-22 wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
Click here to look at the relevant links ⬇️
🔗 Relevant Links
Repository:
Python:
Automated review generated by algorithms-keeper. If there's any problem regarding this review, please open an issue about it.
algorithms-keeper commands and options
algorithms-keeper actions can be triggered by commenting on this PR:
@algorithms-keeper reviewto trigger the checks for only added pull request files@algorithms-keeper review-allto trigger the checks for all the pull request files, including the modified files. As we cannot post review comments on lines not part of the diff, this command will post all the messages in one comment.NOTE: Commands are in beta and so this feature is restricted only to a member or owner of the organization.
|
|
||
| import math | ||
|
|
||
| Point = tuple[float, float] |
There was a problem hiding this comment.
Variable and function names should follow the snake_case naming convention. Please update the following name accordingly: Point
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The remaining test-coverage feedback is a non-blocking nit.
Pull request overview
Adds a rotating-calipers algorithm for computing the diameter and antipodal pair of 2D point sets.
Changes:
- Builds a monotone-chain convex hull.
- Computes diameter using rotating calipers.
- Handles degenerate inputs and includes doctests.
File summaries
| File | Summary | Review finding |
|---|---|---|
geometry/rotating_calipers.py |
Implements hull construction, geometry helpers, and diameter calculation. | Nit (1 vote): add an asymmetric convex-polygon doctest to strengthen sweep validation. |
Review details
Suppressed comments (1)
geometry/rotating_calipers.py:162
- The end-to-end doctests exercise the sweep only on an axis-aligned rectangle (plus degenerate 1D cases). Because that input has strong symmetry and repeated antipodal-area ties, it can pass even if pointer advancement or antipodal selection is wrong for a general convex polygon. Add an asymmetric convex polygon, ideally with interior and/or unsorted points, and assert its known brute-force diameter and returned endpoints.
>>> rotating_calipers([Point(1.0, 1.0)])
Traceback (most recent call last):
...
ValueError: At least 2 points are required to compute polygon diameter.
"""
- Files reviewed: 1/1 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
mindaugl
approved these changes
Sep 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Describe your change
This PR implements the Rotating Calipers algorithm in
geometry/rotating_calipers.py. It computes the maximum Euclidean distance (polygon diameter) and the antipodal point pair of a set of 2D points in O(N log N) overall time (O(N) for the calipers sweep after monotone chain convex hull construction).Checklist