Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Line-line intersection edge cases #3396

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

simoncozens
Copy link
Collaborator

Literally edge cases, this deals with intersections on coincident lines.

@simoncozens simoncozens marked this pull request as draft December 15, 2023 11:38
@simoncozens
Copy link
Collaborator Author

There's still an issue with coincident lines which don't share a start or end point.

@simoncozens simoncozens marked this pull request as ready for review December 15, 2023 11:45
pt = lineLineIntersections(*seg1, *seg2)[0][0]
assert pt == (250.0, 1000.0)
seg3 = [(250, 810), (250, 500)]
assert lineLineIntersections(*seg1, *seg3) == []
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't seg1 and seg3 intersect at (250, 810)?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh sorry I see now (was typing from mobile), the segments actually are coincident, sitting on top of one another. In theory they intersect in all the points where they overlap, but since we need to return some finite results it's ok to return [] in this edge case

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exactly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wait I'm still confused... I think you swapped the two cases.

all the three segments above seg1, seg2 and seg3 are parallel to one another and the Y axis, have the same x coordinate 250; seg1 and and seg2 are the ones that overlap one another, they also share the starting point but coincide for the entire length of seg1 (which is a subset of seg2). So I'd expect we would return [] in this case. Whereas you are returning (250.0, 1000.0) which is their starting point.

On the other hand, seg1 and seg2, while being parallel (x coordinates are all 250), they only touch where seg1 ends and seg3 starts, i.e. (250, 810) -- so I would expect the latter to be returned as their intersection, not []

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants