Python 从面积看凸多边形
给定面积A和整数n。如何构造具有n个顶点的凸多边形(三维)?有些python库可以做到这一点?根据定义,球体表面上的一组点是凸的 生成一组在单位球体上随机分布的n个点,获得凸包,找到区域,并根据需要缩放以获得目标区域 编辑:我可能读错了;你说的是3d,所以我猜你指的是3d多面体;如果您实际上指的是二维多边形,请将其设置为单位圆而不是球体,也可以将点设置为等间距(即正多边形) Edit2:如果我们假设一个具有N条边和面积a的二维正多边形,我们可以直接计算外圆半径R: 从 重新安排,Python 从面积看凸多边形,python,convex-polygon,Python,Convex Polygon,给定面积A和整数n。如何构造具有n个顶点的凸多边形(三维)?有些python库可以做到这一点?根据定义,球体表面上的一组点是凸的 生成一组在单位球体上随机分布的n个点,获得凸包,找到区域,并根据需要缩放以获得目标区域 编辑:我可能读错了;你说的是3d,所以我猜你指的是3d多面体;如果您实际上指的是二维多边形,请将其设置为单位圆而不是球体,也可以将点设置为等间距(即正多边形) Edit2:如果我们假设一个具有N条边和面积a的二维正多边形,我们可以直接计算外圆半径R: 从 重新安排, R = sqr
R = sqrt(2*A / (N * sin(2*pi / N)))
我们可以把它变成一个函数
from math import pi, sin, cos, sqrt
def circumradius(a, n):
return sqrt(2.*a / (n * sin(2.*pi / n)))
让我们用一个已知的物体,一个单位正方形来测试:
circumradius(1, 4) # => 0.7071067
也就是1/sqrt(2),单位正方形的正确中心到角的距离
然后我们可以生成顶点
def make_polygon(a, n):
R = circumradius(a, n)
pts = []
for i in range(n):
theta = i * 2.*pi / n
pts.append((R * sin(theta), R * cos(theta)))
return pts
make_polygon(1, 4)
# => [(0., 0.7071), (0.7071, 0.), (0., -0.7071), (-0.7071, 0.)]
def make_polygon(a, n):
R = circumradius(a, n)
pts = []
for i in range(n):
theta = i * 2.*pi / n
pts.append((R * sin(theta), R * cos(theta)))
return pts
make_polygon(1, 4)
# => [(0., 0.7071), (0.7071, 0.), (0., -0.7071), (-0.7071, 0.)]