我想获取一起形成八边形的多个点的坐标。 对于圆,这很容易完成,如下所示:
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
坐标?
如果您设置 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))