def get_polygon_constraints_m(self, polygons_m, print_out=False):
        """
        :param range_polygones: list of numbers of polygones to test.

        :return A, b: the constraints on the theta-vector of the form A*theta = b
        """
        rows_b = []
        rows_A = []
        m = len(polygons_m[0])
        rows_b.append((m - 2) * pi * np.ones(
            len(polygons_m), ))
        for p in polygons_m:
            row = np.zeros((self.theta.shape[0], ))
            for k in range(m):
                index = get_index(self.corners, p[1], (p[0], p[2]))
                row[index] = 1
                p = np.roll(p, 1)
            assert np.sum(row) == m
            rows_A.append(row)
        A = np.vstack(rows_A)
        b = np.hstack(rows_b)
        num_constraints = A.shape[0]
        A_repeat = np.repeat(A.astype(bool), 3).reshape((1, -1))
        corners = self.corners.reshape((1, -1))
        corners_tiled = np.tile(corners, num_constraints)
        if (print_out):
            print('shape of A {}'.format(A.shape))
        if (print_out):
            print('chosen angles m={}:\n{}'.format(m, (corners_tiled)[A_repeat]
                                                   .reshape((-1, m * 3))))
        if (print_out):
            print('{}-polygones: {}'.format(m, rows_A))
        self.A = A
        self.b = b
        return A, b
:param range_polygones: list of numbers of polygones to test.

        :return A, b: the constraints on the theta-vector of the form A*theta = b