Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从面积看凸多边形_Python_Convex Polygon - Fatal编程技术网

Python 从面积看凸多边形

Python 从面积看凸多边形,python,convex-polygon,Python,Convex Polygon,给定面积A和整数n。如何构造具有n个顶点的凸多边形(三维)?有些python库可以做到这一点?根据定义,球体表面上的一组点是凸的 生成一组在单位球体上随机分布的n个点,获得凸包,找到区域,并根据需要缩放以获得目标区域 编辑:我可能读错了;你说的是3d,所以我猜你指的是3d多面体;如果您实际上指的是二维多边形,请将其设置为单位圆而不是球体,也可以将点设置为等间距(即正多边形) Edit2:如果我们假设一个具有N条边和面积a的二维正多边形,我们可以直接计算外圆半径R: 从 重新安排, R = sqr

给定面积A和整数n。如何构造具有n个顶点的凸多边形(三维)?有些python库可以做到这一点?

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

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

编辑:我可能读错了;你说的是3d,所以我猜你指的是3d多面体;如果您实际上指的是二维多边形,请将其设置为单位圆而不是球体,也可以将点设置为等间距(即正多边形)

Edit2:如果我们假设一个具有N条边和面积a的二维正多边形,我们可以直接计算外圆半径R:

重新安排,

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