def getPolygonBezierCurveList(poly): corners = _getPolygonCorners(poly) ncorns = len(corners) bcurves = [] n = len(poly) if ncorns == 0: print "ZURKA2" tl = getLeftTangent(poly, 0) tl2 = getLeftTangent(poly, n/2) bcurves += bezier_fit.getBezierCurveListToFitPoints(poly[0: 1 + n/2], -tl, tl2) bcurves += bezier_fit.getBezierCurveListToFitPoints(poly[n/2 : n] + [poly[0]], -tl2, tl) return bcurves if ncorns ==1: print "ZURKA" endp = (corners[0] + n/2)%n tl = getLeftTangent(poly, endp) polyLine = getCyclicArrayRangeInclusive(corners[0], endp, poly) bcurves+= bezier_fit.getBezierCurveListToFitPoints(polyLine, None, tl) polyLine = getCyclicArrayRangeInclusive(endp, corners[0], poly) bcurves+= bezier_fit.getBezierCurveListToFitPoints(polyLine, -tl) return bcurves for i in xrange(0,ncorns): polyLine = getCyclicArrayRangeInclusive(corners[i], corners[(i+1)%ncorns], poly) bcurves += bezier_fit.getBezierCurveListToFitPoints(polyLine) return bcurves
def test_bezier_fit(): points = [Vec2(0,0), Vec2(1,0), Vec2(2,0), Vec2(3,0)] b = getBezierCurveListToFitPoints(points) assert utils.areVecArrsClose(points, b[0])
r = 300 tuples = zip( 300 + r*np.cos(angles), 300 + r*np.sin(angles) ) # halfCircle = getVec2ListFromTupleList(tuples) # halfCBez = bezier_fit.getBezierFit(Vec2(0,1), Vec2(0,1), halfCircle) # halfCircle = getIntVec2List(halfCircle) bez2 = [Vec2(0,0), Vec2(0,300), Vec2(400,300), Vec2(400,0)] # pnum = 4 # # bez2RefP = discretizeBezierCurve(bez2, pnum) # beziers = bezier_fit.getBezierFit(Vec2(0,1), Vec2(0,1), bez2RefP) # t1, t2 = bezier_fit._getPathEndpointTangents(points) beziers = bezier_fit.getBezierCurveListToFitPoints(points) while not done: clock.tick(100) for event in pygame.event.get(): if event.type == pygame.QUIT: done=True screen.fill(WHITE) # drawBezierCurve(bez2, pnum, BLUE) for bezCP in beziers:
r = 300 tuples = zip(300 + r * np.cos(angles), 300 + r * np.sin(angles)) # halfCircle = getVec2ListFromTupleList(tuples) # halfCBez = bezier_fit.getBezierFit(Vec2(0,1), Vec2(0,1), halfCircle) # halfCircle = getIntVec2List(halfCircle) bez2 = [Vec2(0, 0), Vec2(0, 300), Vec2(400, 300), Vec2(400, 0)] # pnum = 4 # # bez2RefP = discretizeBezierCurve(bez2, pnum) # beziers = bezier_fit.getBezierFit(Vec2(0,1), Vec2(0,1), bez2RefP) # t1, t2 = bezier_fit._getPathEndpointTangents(points) beziers = bezier_fit.getBezierCurveListToFitPoints(points) while not done: clock.tick(100) for event in pygame.event.get(): if event.type == pygame.QUIT: done = True screen.fill(WHITE) # drawBezierCurve(bez2, pnum, BLUE) for bezCP in beziers: pygame.gfxdraw.bezier(screen, getTupleListFromVec2List(bezCP), 30, RED)
def test_bezier_fit(): points = [Vec2(0, 0), Vec2(1, 0), Vec2(2, 0), Vec2(3, 0)] b = getBezierCurveListToFitPoints(points) assert utils.areVecArrsClose(points, b[0])