求助:如何编写生成正多边形随机顶点的Python函数
生成随机正多边形及内部随机点的实现
实现思路
先根据输入的边数n生成参数随机的正多边形(中心位置、外接圆半径、旋转角度均随机),再基于这个多边形生成内部随机点(或直接获取正多边形的顶点坐标)。
完整代码
import math import random from shapely.geometry import Polygon, Point def generate_random_regular_polygon(n): # 随机生成正多边形的核心参数,可根据需求调整范围 center_x = random.uniform(-100, 100) center_y = random.uniform(-100, 100) radius = random.uniform(10, 50) rotation = random.uniform(0, 2 * math.pi) vertices = [] for i in range(n): # 计算每个顶点的角度 angle = rotation + (2 * math.pi * i) / n x = center_x + radius * math.cos(angle) y = center_y + radius * math.sin(angle) vertices.append((x, y)) return Polygon(vertices) def polygon_random_points(poly, num_points): min_x, min_y, max_x, max_y = poly.bounds points = [] while len(points) < num_points: random_point = Point(random.uniform(min_x, max_x), random.uniform(min_y, max_y)) if random_point.within(poly): points.append(random_point) return points # 使用示例 if __name__ == "__main__": # 输入正多边形边数 n = 6 # 生成随机正n边形 my_polygon = generate_random_regular_polygon(n) # 获取正多边形的顶点坐标(最后一个点与第一个点重复,用于闭合多边形) print("正多边形顶点坐标:") for coord in list(my_polygon.exterior.coords): print(f"({coord[0]:.2f}, {coord[1]:.2f})") # 生成5个多边形内部的随机点 random_points = polygon_random_points(my_polygon, 5) print("\n内部随机点坐标:") for p in random_points: print(f"({p.x:.2f}, {p.y:.2f})")
说明
generate_random_regular_polygon函数:输入边数n,返回一个shapely.Polygon对象,包含随机参数的正n边形。你可以通过my_polygon.exterior.coords直接提取顶点坐标。- 参数调整:可以修改
center_x、center_y的范围调整多边形的位置,修改radius范围调整大小,修改rotation范围调整旋转角度。 - 依赖安装:需要安装shapely库,执行命令:
pip install shapely
内容的提问来源于stack exchange,提问作者Niki Sedlarević
相关产品推荐
相关产品推荐

