Exemplo n.º 1
0
def group_generation(nbGroupes: int, n: int, offset: float = .2) ->list:
    """
    Generates points in distincts groups
    Same number of points per group
    Points's coordinates between 0 and 1
    """
    angle = 0
    centroidsX = []
    centroidsY = []
    while(angle < 2*math.pi):
        # Generate groups's centers
        centroidsX.append(math.cos(angle))
        centroidsY.append(math.sin(angle))
        angle += (2 * math.pi) / nbGroupes

    points = []
    cl = color_generation(nbGroupes)
    for i in range(nbGroupes):
        # Generate points for each group
        points.extend([
            norm(uniform(centroidsX[i] - offset, centroidsX[i] + offset), -1 - offset, 1 + offset),
            norm(uniform(centroidsY[i] - offset, centroidsY[i] + offset), -1 - offset, 1 + offset),
            cl[i]
        ] for j in range(n))

    return points
Exemplo n.º 2
0
def percent_generation(percentages: list, n: int, offset: float = .2) ->list:
    """
    Generates points in distincts group
    Variable amount of points per group determined by the percentages parameter
    Points's coordinates between 0 and 1
    """
    # Check if the percentages are correct
    if(sum(percentages) > 1 or sum(percentages) <= 0):
        raise ValueError("The given percentages aren't correct, sum > 1 or sum <= 0")
    nbGroupes = len(percentages)
    cl = color_generation(nbGroupes)

    # DEBUG : print(percentages)
    # Conversion : from percents to number of points
    for i in range(nbGroupes):
        percentages[i] = int(n * percentages[i])
    # Number of points lost because of the divisions
    lostpoints = n - sum(percentages)
    print("%s points haven't been placed" % str(lostpoints))
    # DEBUG : print(percentages)

    # Groups positions
    angle = 0
    centroidsX = []
    centroidsY = []
    while(angle < 2*math.pi):
        # Generate groups's centers
        centroidsX.append(math.cos(angle))
        centroidsY.append(math.sin(angle))
        angle += (2 * math.pi) / nbGroupes

    # Points generation
    points = []
    for i in range(nbGroupes):
        # Generate the amount of points specified by the percentages list
        points.extend([
            norm(uniform(centroidsX[i] - offset, centroidsX[i] + offset), -1 - offset, 1 + offset),
            norm(uniform(centroidsY[i] - offset, centroidsY[i] + offset), -1 - offset, 1 + offset),
            cl[i]
        ] for j in range(percentages[i]))

    return points