-3
給定區域A和整數n。如何構造n個頂點的凸多邊形(3維)?一些python庫可以做到這一點?來自區域的凸多邊形
給定區域A和整數n。如何構造n個頂點的凸多邊形(3維)?一些python庫可以做到這一點?來自區域的凸多邊形
根據定義,球體表面上的一組點是凸的。
生成隨機分佈在單位球面上的一組n個點,得到凸包,找到面積並根據需要縮放以獲得目標區域。
編輯:我可能誤讀了;你說3d,所以我認爲你的意思是3D多面體;如果你實際上是指二維多邊形,使它成爲一個單位圓而不是一個球體,並且你也可以使這些點間隔相等(即正多邊形)。
EDIT2:如果我們假設具有N個側面和區域A內的2D正多邊形,我們可以計算出外接圓ř直接:
從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.)]