def __init__(s): #Dane: win=Window("Point",0,0,600,600) master=win.getMaster() desk=Desk(master) C=desk.getC() p1=Point(100,100) p2=Point(200,100) p3=Point(200,200) p4=Point(100,200) desk.addPoint(p1) desk.addPoint(p2) desk.addPoint(p3) desk.addPoint(p4) path=Path() path.addPoint(p1) path.addPoint(p2) path.addPoint(p3) path.addPoint(p4) desk.addPath(path) win.loop()
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 testLength(self): p = Path() p.addPoint(self.p0) p.addPoint(self.p1) l0 = Line(self.p0, self.p1) l1 = Line(self.p1, self.p2) self.assertEquals(p.length(), l0.length()) p.addPoint(self.p2) self.assertEquals(p.length(), l0.length() + l1.length())
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())