来自区域的凸多边形

时间:2014-03-25 19:12:17

标签: python convex-polygon

给定区域 A 和整数 n 。如何用n个顶点构造凸多边形(三维)?有些python库可以做到吗?

1 个答案:

答案 0 :(得分:1)

根据定义,球体表面上的一组点是凸的。

生成一组随机分布在单位球上的n个点,获取凸包,找到该区域,并根据需要进行缩放以获得目标区域。

编辑:我可能误读了;你说3d,所以我认为你的意思是3d多面体;如果你实际上是指2d多边形,那么将它设为一个单位圆而不是一个球体,你也可以使这些点等间距(即正多边形)。

Edit2:如果我们假设一个具有N边和面积A的2d正多边形,我们可以直接计算圆周R:

来自http://www.mathopenref.com/polygonregulararea.html

A = 0.5 * R**2 * N * sin(2*pi / N)

重排,

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.)]