Export to GitHub

pyeuclid - issue #4

2D Tengential Intersections Cause AssertionErrors


Posted on Jan 19, 2009 by Happy Hippo

Intersecting a circle with Line2 (2D line) along a tangent causes an AssertionError when constructing the resultant Line2. The documentation states that tangential cases will result in a zero length line (start and end points the same), but the Line2 class checks for this and throws an assertion.

Example: >>> from euclid import * >>> c = Circle(Point2(0.0, 0.0), 1.0) >>> l = Line2(Point2(0.0, 1.0), Point2(1.0, 1.0)) >>> l.intersect(c) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "euclid.py", line 1602, in intersect return other._intersect_line2(self) File "euclid.py", line 1679, in _intersect_line2 return _intersect_line2_circle(other, self) File "euclid.py", line 1463, in _intersect_line2_circle L.p.y + u2 * L.v.y)) File "euclid.py", line 1579, in init raise AttributeError, 'Line has zero-length vector' AttributeError: Line has zero-length vector

I'm not sure if I should expect a zero length line segment (LineSegment2(<0.00, 1.00> to <0.00, 1.00>)) which could cause problems if you assume that all line segments have length or a Point2 which could cause problems if (Point2(0.00, 0.00)) you assume that all intersections return LineSegment2 classes.

Versions tested: python 2.5.1 and 2.6 euclid.py (unversioned from google-code page. MD5: 0e98208edc78221be8ec23ac85960ee7) Ubuntu 7.0.4 (older version)

Comment #1

Posted on Jan 20, 2009 by Quick Bird

Thanks, fixed in r27; this kind of intersection now returns a Point2 (untested).

Status: Fixed

Labels:
Type-Defect Priority-Medium