Static method. Returns True if the polygon is convex regardless 
        of whether its vertices follow a clockwise or a 
        counter-clockwise order. This is a requirement for the rest of 
        the program.
        
        :param points: Points intented to form a polygon.
        :type points: ndarray with points xyz in rows
        :returns: Whether a polygon is convex or not.
        :rtype: bool
        
        .. note:: Despite the code works for ccw polygons, in order to 
            avoid possible bugs it is always recommended to use ccw 
            rather than cw.
            
        .. warning:: This method do not check the order of the points.

def is_convex(points):
        """
        Static method. Returns True if the polygon is convex regardless 
        of whether its vertices follow a clockwise or a 
        counter-clockwise order. This is a requirement for the rest of 
        the program.
        
        :param points: Points intented to form a polygon.
        :type points: ndarray with points xyz in rows
        :returns: Whether a polygon is convex or not.
        :rtype: bool
        
        .. note:: Despite the code works for ccw polygons, in order to 
            avoid possible bugs it is always recommended to use ccw 
            rather than cw.
            
        .. warning:: This method do not check the order of the points.
        """
        # Verification based on the cross product
        n_points = points.shape[0]
        i=-1
        u = points[i] - points[i-1]
        v = points[i+1] - points[i]
        last = np.sign(np.round(np.cross(u, v)))
        while i < n_points-1:
            u = points[i] - points[i-1]
            v = points[i+1] - points[i]
            s = np.sign(np.round(np.cross(u, v)))
            if abs((s - last).max()) > 1:
                return False
            last = s
            i += 2
        return True