You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何编写生成正多边形随机顶点的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})")

说明

  1. generate_random_regular_polygon函数:输入边数n,返回一个shapely.Polygon对象,包含随机参数的正n边形。你可以通过my_polygon.exterior.coords直接提取顶点坐标。
  2. 参数调整:可以修改center_x、center_y的范围调整多边形的位置,修改radius范围调整大小,修改rotation范围调整旋转角度。
  3. 依赖安装:需要安装shapely库,执行命令:pip install shapely

内容的提问来源于stack exchange,提问作者Niki Sedlarević

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:45:44