def testValid(self): validPath = Path() validPath.addPoint(self.p0) validPath.addPoint(self.p1) validPath.addPoint(self.p2) validPath.addPoint(self.p0) self.assertTrue(validPath.isConnected())
def jarviswalk(points): """Implementation of Jarvis Walk aka Gift wrapping algorithm. Based on the article http://en.wikipedia.org/wiki/Gift_wrapping_algorithm """ hull = Path() xsorted = sorted(points, key=lambda point: point.x) hull.addPoint(xsorted[0]) while True: nextP = None maxLinearPoint = None maxLinearDistance = -1.0 possiblePoints = filter(lambda p: p not in hull.points[1:], xsorted) for p in possiblePoints: if p is hull.points[-1]: continue line = Line(hull.points[-1], p) allright, localMaxLinear, localMaxLinearDistance = allrightAndMaxLinearPoint(line, xsorted) if allright: nextP = p break if localMaxLinear is not None and localMaxLinearDistance != -1.0 and localMaxLinearDistance > maxLinearDistance: maxLinearPoint, maxLinearDistance = (localMaxLinear, localMaxLinearDistance) assert(nextP is not None or (maxLinearPoint is not None and maxLinearDistance > 0.0)) if nextP is not None: hull.addPoint(nextP) else: hull.addPoint(maxLinearPoint) if hull.isConnected(): break return hull
def testDisconnected(self): disconnectedPath = Path() disconnectedPath.addPoint(self.p0) disconnectedPath.addPoint(self.p1) disconnectedPath.addPoint(self.p2) self.assertFalse(disconnectedPath.isConnected())
def testEmpty(self): emptyPath = Path() self.assertFalse(emptyPath.isConnected()) self.assertEquals(emptyPath.length(), 0)