def intersect_circle(self, center, radius):
        '''
        Given a circle, finds the intersection point(s) of the arc with the circle.
        Returns a list of 2x1 numpy arrays. The list has length 0, 1 or 2, depending on how many intesection points there are.
        If the circle touches the arc, it is reported as two intersection points (which are equal).
        Points are ordered along the arc.
        Intersection with the same circle as the arc's own (which means infinitely many points usually) is reported as no intersection at all.
        
        >>> a = Arc((0, 0), 1, -60, 60, True)
        >>> a.intersect_circle((1, 0), 1)
        [array([ 0.5..., -0.866...]), array([ 0.5...,  0.866...])]
        >>> a.intersect_circle((0.9, 0), 1)
        []
        >>> a.intersect_circle((1,-0.1), 1)
        [array([ 0.586...,  0.810...])]
        >>> a.intersect_circle((1, 0.1), 1)
        [array([ 0.586..., -0.810...])]
        >>> a.intersect_circle((0, 0), 1)  # Infinitely many intersection points
        []
        >>> a.intersect_circle((2, 0), 1)  # Touching point, hence repeated twice
        [array([ 1.,  0.]), array([ 1.,  0.])]
        
        >>> a = Arc((0, 0), 1, 60, -60, False) # Same arc, different direction
        >>> a.intersect_circle((1, 0), 1)
        [array([ 0.5...,  0.866...]), array([ 0.5..., -0.866...])]
        
        >>> a = Arc((0, 0), 1, 120, -120, True)
        >>> a.intersect_circle((-1, 0), 1)
        [array([-0.5...,  0.866...]), array([-0.5..., -0.866...])]
        >>> a.intersect_circle((-0.9, 0), 1)
        []
        >>> a.intersect_circle((-1,-0.1), 1)
        [array([-0.586...,  0.810...])]
        >>> a.intersect_circle((-1, 0.1), 1)
        [array([-0.586..., -0.810...])]
        >>> a.intersect_circle((-2, 0), 1)
        [array([-1.,  0.]), array([-1.,  0.])]
        >>> a = Arc((0, 0), 1, -120, 120, False)
        >>> a.intersect_circle((-1, 0), 1)
        [array([-0.5..., -0.866...]), array([-0.5...,  0.866...])]
        '''
        intersections = circle_circle_intersection(self.center, self.radius, center, radius)
        if intersections is None:
            return []
        
        # Check whether the points lie on the arc and order them accordingly
        _len = self.length_degrees()
        isections = [[self.sign * (self.point_as_angle(pt) - self.from_angle) % 360.0, pt] for pt in intersections]
        
        # Try to find as many candidate intersections as possible (i.e. +- tol within arc limits)
        # Unless arc's length is 360, interpret intersections just before the arc's starting point as belonging to the starting point.
        if _len < 360.0 - tol:
            for isec in isections:
                if isec[0] > 360.0 - tol:
                    isec[0] = 0.0
        
        isections = [(a, pt[0], pt[1]) for (a, pt) in isections if a < _len + tol or a > 360 - tol]
        isections.sort()
        return [np.array([b, c]) for (a, b, c) in isections]
Given a circle, finds the intersection point(s) of the arc with the circle.
        Returns a list of 2x1 numpy arrays. The list has length 0, 1 or 2, depending on how many intesection points there are.
        If the circle touches the arc, it is reported as two intersection points (which are equal).
        Points are ordered along the arc.
        Intersection with the same circle as the arc's own (which means infinitely many points usually) is reported as no intersection at all.
        
        >>> a = Arc((0, 0), 1, -60, 60, True)
        >>> a.intersect_circle((1, 0), 1)
        [array([ 0.5..., -0.866...]), array([ 0.5...,  0.866...])]
        >>> a.intersect_circle((0.9, 0), 1)
        []
        >>> a.intersect_circle((1,-0.1), 1)
        [array([ 0.586...,  0.810...])]
        >>> a.intersect_circle((1, 0.1), 1)
        [array([ 0.586..., -0.810...])]
        >>> a.intersect_circle((0, 0), 1)  # Infinitely many intersection points
        []
        >>> a.intersect_circle((2, 0), 1)  # Touching point, hence repeated twice
        [array([ 1.,  0.]), array([ 1.,  0.])]
        
        >>> a = Arc((0, 0), 1, 60, -60, False) # Same arc, different direction
        >>> a.intersect_circle((1, 0), 1)
        [array([ 0.5...,  0.866...]), array([ 0.5..., -0.866...])]
        
        >>> a = Arc((0, 0), 1, 120, -120, True)
        >>> a.intersect_circle((-1, 0), 1)
        [array([-0.5...,  0.866...]), array([-0.5..., -0.866...])]
        >>> a.intersect_circle((-0.9, 0), 1)
        []
        >>> a.intersect_circle((-1,-0.1), 1)
        [array([-0.586...,  0.810...])]
        >>> a.intersect_circle((-1, 0.1), 1)
        [array([-0.586..., -0.810...])]
        >>> a.intersect_circle((-2, 0), 1)
        [array([-1.,  0.]), array([-1.,  0.])]
        >>> a = Arc((0, 0), 1, -120, 120, False)
        >>> a.intersect_circle((-1, 0), 1)
        [array([-0.5..., -0.866...]), array([-0.5...,  0.866...])]