在给定方向创建均匀间隔的点

时间:2021-01-08 07:30:49

标签: python numpy scientific-computing

假设我在 2D 方向上有一条任意方向的线。我想沿着这条线创建均匀间隔的点。我想到了一种编码方法,但似乎它会变得混乱,Python/Numpy 中是否有任何库可以做到这一点?

1 个答案:

答案 0 :(得分:1)

恐怕没有任何库函数来生成您的点列表 您必须使用自己的代码生成它。

假设您的线由以下 2 个点(xy 坐标)定义:

p0 = np.array([1.0, 1.0])
p1 = np.array([3.0, 2.0])

还假设要创建的“额外”点数为:

n = 10

然后,创建一个点列表(一个 Numpy 形状的数组 n + 2, 2), 计算这些点之间的差异:

dlt = p1 - p0

然后运行:

result = np.vstack([ p0 + i * dlt for i in range(n + 2) ])

结果是:

array([[ 1.,  1.],
       [ 3.,  2.],
       [ 5.,  3.],
       [ 7.,  4.],
       [ 9.,  5.],
       [11.,  6.],
       [13.,  7.],
       [15.,  8.],
       [17.,  9.],
       [19., 10.],
       [21., 11.],
       [23., 12.]])

所以前 2 个点是 p0p1 和其他点 进一步在同一行上,以相同的步长dlt

编辑

要生成 n 个点介于 2 个点(p0p1)之间的列表, 包括这两个端点,您可以运行:

result = np.vstack([np.linspace(p0[0], p1[0], n), np.linspace(p0[1], p1[1], n)]).T

但是如果你有一个多边形,那么你应该为每一边定义一个数字 中间点,然后使用上面的公式。

在一般情况下,如何选择号码可能会出现问题 点数。