Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project!

## [PyX-checkins] commit 3535: trunk/pyx/pyx/normpath.py: for two long colinear lines, we need to test the beginning and end point of each line against the other

 [PyX-checkins] commit 3535: trunk/pyx/pyx/normpath.py: for two long colinear lines, we need to test the beginning and end point of each line against the other From: - 2013-10-14 10:50:21 ```Revision: 3535 https://sourceforge.net/p/pyx/code/3535/ Author: wobsta Date: 2013-10-14 10:50:18 +0000 (Mon, 14 Oct 2013) Log Message: ----------- for two long colinear lines, we need to test the beginning and end point of each line against the other Modified Paths: -------------- trunk/pyx/pyx/normpath.py Modified: trunk/pyx/pyx/normpath.py =================================================================== --- trunk/pyx/pyx/normpath.py 2013-10-14 10:31:45 UTC (rev 3534) +++ trunk/pyx/pyx/normpath.py 2013-10-14 10:50:18 UTC (rev 3535) @@ -277,8 +277,8 @@ ox_pt = 0.5*(other.x0_pt + other.x1_pt) oy_pt = 0.5*(other.y0_pt + other.y1_pt) - # We define two helper functions returning a valid parameter of - # a point on a line given a point close to this line. + # We define a helper function returning a valid parameter of a + # point on a line given a point close to this line. def closepoint(x_pt, y_pt, x0_pt, y0_pt, x1_pt, y1_pt): """Returns the line parameter p in range [0, 1] for which @@ -297,18 +297,6 @@ return p return None # just be explicit in returning None here - def closepoint2(x_pt, y_pt, - x0_pt, y0_pt, x1_pt, y1_pt, - X0_pt, Y0_pt, X1_pt, Y1_pt): - """Same as closepoint but for two lines ((x0_pt, y0_pt), - (x1_pt, y1_pt) and ((X0_pt, Y0_pt), (X1_pt, Y1_pt)) - returning a tuple of parameters.""" - p = closepoint(x_pt, y_pt, x0_pt, y0_pt, x1_pt, y1_pt) - if p is None: - return None, None - P = closepoint(x_pt, y_pt, X0_pt, Y0_pt, X1_pt, Y1_pt) - return p, P - if short_self and short_other: # If both lines are short, we just measure the distance of # the middle points. @@ -325,20 +313,22 @@ if p is not None: return [(p, 0.5)] else: - # For two long colinear lines, we need to test the middle - # points constructed from a beginning and an end point of - # the two lines, in both combinations. We return just one + # For two long colinear lines, we need to test the + # beginning and end point of the two lines with respect to + # the other line, in all combinations. We return just one # solution even when the lines intersect for a whole range. - sp, so = closepoint2(0.5*(self.x0_pt + other.x1_pt), 0.5*(self.y0_pt + other.y1_pt), - self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt, - other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) - if sp is not None and so is not None: - return [(sp, so)] - sp, so = closepoint2(0.5*(self.x1_pt + other.x0_pt), 0.5*(self.y1_pt + other.y0_pt), - self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt, - other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) - if sp is not None and so is not None: - return [(sp, so)] + p = closepoint(self.x0_pt, self.y0_pt, other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) + if p is not None: + return [(0, p)] + p = closepoint(self.x1_pt, self.y1_pt, other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) + if p is not None: + return [(1, p)] + p = closepoint(other.x0_pt, other.y0_pt, self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt) + if p is not None: + return [(p, 0)] + p = closepoint(other.x1_pt, other.y1_pt, self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt) + if p is not None: + return [(p, 1)] return [] det = 1.0 / invdet ```

 [PyX-checkins] commit 3535: trunk/pyx/pyx/normpath.py: for two long colinear lines, we need to test the beginning and end point of each line against the other From: - 2013-10-14 10:50:21 ```Revision: 3535 https://sourceforge.net/p/pyx/code/3535/ Author: wobsta Date: 2013-10-14 10:50:18 +0000 (Mon, 14 Oct 2013) Log Message: ----------- for two long colinear lines, we need to test the beginning and end point of each line against the other Modified Paths: -------------- trunk/pyx/pyx/normpath.py Modified: trunk/pyx/pyx/normpath.py =================================================================== --- trunk/pyx/pyx/normpath.py 2013-10-14 10:31:45 UTC (rev 3534) +++ trunk/pyx/pyx/normpath.py 2013-10-14 10:50:18 UTC (rev 3535) @@ -277,8 +277,8 @@ ox_pt = 0.5*(other.x0_pt + other.x1_pt) oy_pt = 0.5*(other.y0_pt + other.y1_pt) - # We define two helper functions returning a valid parameter of - # a point on a line given a point close to this line. + # We define a helper function returning a valid parameter of a + # point on a line given a point close to this line. def closepoint(x_pt, y_pt, x0_pt, y0_pt, x1_pt, y1_pt): """Returns the line parameter p in range [0, 1] for which @@ -297,18 +297,6 @@ return p return None # just be explicit in returning None here - def closepoint2(x_pt, y_pt, - x0_pt, y0_pt, x1_pt, y1_pt, - X0_pt, Y0_pt, X1_pt, Y1_pt): - """Same as closepoint but for two lines ((x0_pt, y0_pt), - (x1_pt, y1_pt) and ((X0_pt, Y0_pt), (X1_pt, Y1_pt)) - returning a tuple of parameters.""" - p = closepoint(x_pt, y_pt, x0_pt, y0_pt, x1_pt, y1_pt) - if p is None: - return None, None - P = closepoint(x_pt, y_pt, X0_pt, Y0_pt, X1_pt, Y1_pt) - return p, P - if short_self and short_other: # If both lines are short, we just measure the distance of # the middle points. @@ -325,20 +313,22 @@ if p is not None: return [(p, 0.5)] else: - # For two long colinear lines, we need to test the middle - # points constructed from a beginning and an end point of - # the two lines, in both combinations. We return just one + # For two long colinear lines, we need to test the + # beginning and end point of the two lines with respect to + # the other line, in all combinations. We return just one # solution even when the lines intersect for a whole range. - sp, so = closepoint2(0.5*(self.x0_pt + other.x1_pt), 0.5*(self.y0_pt + other.y1_pt), - self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt, - other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) - if sp is not None and so is not None: - return [(sp, so)] - sp, so = closepoint2(0.5*(self.x1_pt + other.x0_pt), 0.5*(self.y1_pt + other.y0_pt), - self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt, - other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) - if sp is not None and so is not None: - return [(sp, so)] + p = closepoint(self.x0_pt, self.y0_pt, other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) + if p is not None: + return [(0, p)] + p = closepoint(self.x1_pt, self.y1_pt, other.x0_pt, other.y0_pt, other.x1_pt, other.y1_pt) + if p is not None: + return [(1, p)] + p = closepoint(other.x0_pt, other.y0_pt, self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt) + if p is not None: + return [(p, 0)] + p = closepoint(other.x1_pt, other.y1_pt, self.x0_pt, self.y0_pt, self.x1_pt, self.y1_pt) + if p is not None: + return [(p, 1)] return [] det = 1.0 / invdet ```