прямоугольники и квадраты могут быть легко сделаны с помощью NumPy.Шаблон можно использовать в качестве начального числа и повторять, если вам нужна сетка из прямоугольников.Например, получим квадрат из 5 единиц
import numpy as np
dx = 5
dy = 5
X = [0.0, 0.0, dx, dx, 0.0] # X, Y values for a unit square
Y = [0.0, dy, dy, 0.0, 0.0]
a = np.array(list(zip(X, Y)))
Немного излишков для небольших полигонов, но einsum может быть легко введен в игру для расчета периметров геометрии или сотен или тысяч пар координат.
a = np.reshape(a, (1,) + a.shape)
diff = a[:, 0:-1] - a[:, 1:]
d_leng = np.sqrt(np.einsum('ijk,ijk->ij', diff, diff)).squeeze()
length = np.sum(d_leng.flatten())
, поэтому для простого многоугольника (первая и последняя точки являются дубликатами, обеспечивающими замыкание), координаты, боковая и общая длины будут следующими:
d_leng
array([5., 5., 5., 5.])
length
20.0
a
array([[[0., 0.],
[0., 5.],
[5., 5.],
[5., 0.],
[0., 0.]]])
Если вам нужна другая точка начала доначало, это может быть достигнуто просто ...
a + [10, 10]
array([[[10., 10.],
[10., 15.],
[15., 15.],
[15., 10.],
[10., 10.]]])