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
base: main
Are you sure you want to change the base?
Conversation
There's still an issue with coincident lines which don't share a start or end point. |
Tests/misc/bezierTools_test.py
Outdated
pt = lineLineIntersections(*seg1, *seg2)[0][0] | ||
assert pt == (250.0, 1000.0) | ||
seg3 = [(250, 810), (250, 500)] | ||
assert lineLineIntersections(*seg1, *seg3) == [] |
There was a problem hiding this comment.
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)?
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Exactly.
There was a problem hiding this comment.
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 []
42d8e2f
to
8811dfc
Compare
Literally edge cases, this deals with intersections on coincident lines.