def calculate_centre_of_mass(points_list):
    """
    Calculates the centre of mass for the non-intersecting polygon defined by points_list.

    .. note:: the centre of mass will be incorrect for intersecting polygons.

    .. note::

            it is assumed that points_list defines, in order, the vertices of the polygon. The last
            point is assumed to connect to the first point.

    :param points_list: a list of x, y points defining the non-intersecting polygon
    :return: the x,y centre of mass
    """
    centre_x = 0
    centre_y = 0
    area = 0
    size = len(points_list)
    points_list.append(points_list[0])
    for i, each in enumerate(points_list):
        if i == size:
            break
        added_area = each[0] * points_list[i + 1][1] - points_list[i + 1][0
            ] * each[1]
        area += added_area
        centre_x += (each[0] + points_list[i + 1][0]) * added_area
        centre_y += (each[1] + points_list[i + 1][1]) * added_area
    area *= 0.5
    try:
        centre_x /= 6 * area
        centre_y /= 6 * area
    except ZeroDivisionError:
        raise ValueError('Points not ordered in polygon')
    return centre_x, centre_y
