Skip to content
Bezier.py 34.8 KiB
Newer Older
        #     = P0*(1-t)**3/6 + P1*(3*t**3 - 6*t**2 + 4)/6 + P2*(-3*t**3 + 3*t**2 + 3*t + 1)/6 + P3*t**3/6

        return (self._p0/6 + 2*self._p1/3 + self._p2/6 +
                (-self._p0/2 + self._p2/2)*t +
                (self._p0/2 - self._p1 + self._p2/2)*t**2 +
                (-self._p0/6 + self._p1/2 - self._p2/2 + self._p3/6)*t**3)

####################################################################################################

class CubicSpline2D(Primitive2DMixin, PrimitiveNP):

    """Class to implements 2D Cubic Spline Curve."""

    __number_of_points__ = 4
    __part_cls__ = CubicSplinePart2D

    #######################################

    def __init__(self, *points):

        points = self.handle_points(points)
        PrimitiveNP.__init__(self, points)
        if len(self) < self.__number_of_points__:
            raise ValueError('Require at least 4 points')

    ##############################################

    def number_of_parts(self):
        return self.number_of_points - self.__number_of_points__

    ##############################################

    def iter_on_parts(self):
        for points in self.iter_on_nuplets(self.__number_of_points__):
            yield self.__part_cls__(*points)

    ##############################################

    def get_part(self, i):
        points = self._points[i:i+self.__number_of_points__]
        return self.__part_cls__(*points)