def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points, on a 2D surface. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ if seed is not None: seed_function(seed) points = [] # Find outer extent of polygon max_x = min_x = polygon[0][0] max_y = min_y = polygon[0][1] for point in polygon[1:]: x = point[0] if x > max_x: max_x = x if x < min_x: min_x = x y = point[1] if y > max_y: max_y = y if y < min_y: min_y = y while len(points) < number_of_points: x = uniform(min_x, max_x) y = uniform(min_y, max_y) append = False if is_inside_polygon([x, y], polygon): append = True # Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([x, y], ex_poly): append = False if append is True: points.append([x, y]) return points
def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ # Find outer extent of polygon max_x = min_x = polygon[0][0] max_y = min_y = polygon[0][1] for point in polygon[1:]: x = point[0] if x > max_x: max_x = x if x < min_x: min_x = x y = point[1] if y > max_y: max_y = y if y < min_y: min_y = y # Generate random points until enough are in polygon seed_function(seed) points = [] while len(points) < number_of_points: x = uniform(min_x, max_x) y = uniform(min_y, max_y) append = False if is_inside_polygon([x, y], polygon): append = True #Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([x, y], ex_poly): append = False if append is True: points.append([x, y]) return points
def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ polygon = ensure_numeric(polygon) # Find outer extent of polygon minpx = min(polygon[:, 0]) maxpx = max(polygon[:, 0]) minpy = min(polygon[:, 1]) maxpy = max(polygon[:, 1]) # Generate random points until enough are in polygon seed_function(seed) points = [] while len(points) < number_of_points: x = uniform(minpx, maxpx) y = uniform(minpy, maxpy) append = False if is_inside_polygon([x, y], polygon): append = True #Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([x, y], ex_poly): append = False if append is True: points.append([x, y]) return points
def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ polygon = ensure_numeric(polygon) # Find outer extent of polygon minpx = min(polygon[:, 0]) maxpx = max(polygon[:, 0]) minpy = min(polygon[:, 1]) maxpy = max(polygon[:, 1]) # Generate random points until enough are in polygon seed_function(seed) points = [] while len(points) < number_of_points: x = uniform(minpx, maxpx) y = uniform(minpy, maxpy) append = False if is_inside_polygon([x, y], polygon): append = True # Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([x, y], ex_poly): append = False if append is True: points.append([x, y]) return points
def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ from random import uniform, seed as seed_function seed_function(seed) points = [] # Find outer extent of polygon extents = AABB(polygon) while len(points) < number_of_points: rand_x = uniform(extents.xmin, extents.xmax) rand_y = uniform(extents.ymin, extents.ymax) append = False if is_inside_polygon([rand_x, rand_y], polygon): append = True #Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([rand_x, rand_y], ex_poly): append = False if append is True: points.append([rand_x, rand_y]) return points
def populate_polygon(polygon, number_of_points, seed=None, exclude=None): """Populate given polygon with uniformly distributed points. Input: polygon - list of vertices of polygon number_of_points - (optional) number of points seed - seed for random number generator (default=None) exclude - list of polygons (inside main polygon) from where points should be excluded Output: points - list of points inside polygon Examples: populate_polygon( [[0,0], [1,0], [1,1], [0,1]], 5 ) will return five randomly selected points inside the unit square """ from random import uniform, seed as seed_function seed_function(seed) points = [] # Find outer extent of polygon extents = AABB(polygon) while len(points) < number_of_points: rand_x = uniform(extents.xmin, extents.xmax) rand_y = uniform(extents.ymin, extents.ymax) append = False if is_inside_polygon([rand_x, rand_y], polygon): append = True # Check exclusions if exclude is not None: for ex_poly in exclude: if is_inside_polygon([rand_x, rand_y], ex_poly): append = False if append is True: points.append([rand_x, rand_y]) return points
def generate_random_points_in_bbox(polygon, N, seed=None): """Generate random points in polygon bounding box """ # Find outer extent of polygon minpx = min(polygon[:, 0]) maxpx = max(polygon[:, 0]) minpy = min(polygon[:, 1]) maxpy = max(polygon[:, 1]) seed_function(seed) points = [] for _ in range(N): x = uniform(minpx, maxpx) y = uniform(minpy, maxpy) points.append([x, y]) return numpy.array(points)