从八边形中获取n个坐标

问题描述 投票:0回答:1

我想获取一起形成八边形的多个点的坐标。 对于圆,这很容易完成,如下所示:

import numpy as np

n = 100
x = np.cos(np.linspace(0, 2 * np.pi, n))
y = np.sin(np.linspace(0, 2 * np.pi, n))

coordinates = list(zip(x, y))

通过改变

n
我可以增加/减少“角度”。现在我想对八边形做同样的事情。我知道八边形有8条边,每边之间的角度是45度。 假设八边形的周长是 30.72m。因此每边的长度为 3.79m。

perimeter = 30.72
n_sides = 8
angle = 45

如何获得代表这个八边形的

n
坐标?

python matplotlib
1个回答
0
投票

如果您设置 n=8 并使用圆的代码,您将收到八边形的坐标。然后,您需要缩放该八边形以满足您的周长。我添加了一个距离函数来帮助计算原始八角形边缘的大小。此外,还四舍五入到小数点后 4 位,以使其更具可读性,但您可以选择删除它。我相信这适用于任何尺寸和任何所需周长的形状。

import numpy as np
    
def distance(coords1, coords2):
    return ((coords1[0] - coords2[0])**2 + (coords1[1] - coords2[1])**2 )**0.5

n = 8
target_perimeter = 30.72
x = np.cos(np.linspace(0, 2 * np.pi, n))
y = np.sin(np.linspace(0, 2 * np.pi, n))

coordinates = list(zip(x, y))
perimeter = n * distance(coordinates[0], coordinates[1])
scaling_factor = target_perimeter / perimeter
scaled_coordinates = scaling_factor * np.array(coordinates)
print(scaled_coordinates.round(4))
© www.soinside.com 2019 - 2024. All rights reserved.