【发布时间】:2021-11-19 03:34:45
【问题描述】:
我正在尝试在一个类似于不规则菱形或菱形的区域内构建一个等距的点网格。该菱形的边框由以下列表给出:
xlim = list(np.linspace(0,1/4*(np.sqrt(3)+1), num=56)) + list(np.linspace(1/4*(np.sqrt(3)+1),np.sqrt(3)/2, num=20)) + \
list(np.linspace(np.sqrt(3)/2, 1/4*(np.sqrt(3)+1), num=20)) + list(np.linspace( 1/4*(np.sqrt(3)+1),0, num=56))
ylim = list(np.linspace(0, np.sqrt(3)/4, num=56)) + list(np.linspace(np.sqrt(3)/4,0, num=20)) +\
list(np.linspace(0, -np.sqrt(3)/4,num=20)) + list(np.linspace(-np.sqrt(3)/4,0, num=56))
然后我创建了border 列表,其中包含一个带有周长坐标的元组:
border = []
for i in range(len(xlim)):
border.append((xlim[i],ylim[i]))
您可以通过绘制xlim 和ylim 数组来检查我们得到下面的多边形形状
.
我正在尝试在这个多边形内创建一个等间距的网格并包括边界,这就是我到目前为止所做的:
width = np.linspace(0,np.sqrt(3)/2,20)
kgrid = []
for i in range(0,len(width)):
for j in range(0,len(width)):
x = width[i]
y = width[j]
if (x,y) in border:
continue
else:
kgrid.append([x,y])
Kgrid 将是我的结果列表,其中包含等距点的 x 和 y 坐标的元组,但是,我得到了长度和宽度 sqrt(3)/2 的整个正方形,而不是菱形内的网格仅限。
我不完全确定我做错了什么,所以任何朝着正确方向的指导或提示都会对我有所帮助。
编辑:
测试 Mozway 网格的连续交叉点或点之间的距离。
已将点保存在列表中:
for x, y in zip(X, Y):
xs = np.linspace(*x,n1)
ys = np.linspace(*y,n1)
kx.append(xs)
ky.append(ys)
ax.plot(xs, ys, c='k', ls='', marker='.')
plt.gca().set_aspect('equal')
这里的kx和ky,我可以把这两个展平得到网格的坐标:
kx = np.array(kx).flatten()
ky = np.array(ky).flatten()
当我测试 (kx,ky) 对(即 kx[0],ky[0] 和 kx1, ky1)之间的距离时,当循环在迭代中接近 (kx) 的长度时, 连续点 (kx,ky) 之间的距离减小。见这里:
dist = []
for i in range(len(kx)-1):
dist.append(np.sqrt((kx[i]-kx[i+1])**2 + (ky[i]-ky[i+1])**2))
检查 ``dist``` 的输出,我发现对于几次迭代,我得到了大致相同的距离,但在循环的整个生命周期中,情况并非如此。
例如检查输出。
...0.049274092704200266,
0.049274092704200266,
0.04927409270420008,
0.04927409270420032,
0.049274092704200266,
0.04927409270420008,
0.04927409270420021,
0.04927409270420008,
2.045339229827365,
0.04868407742479125,
0.04868407742479123,
0.04868407742479123,
0.04868407742479125,
0.04868407742479125,
0.048684077424791194,
0.04868407742479126,
0.04868407742479124,
0.04868407742479124,
0.048684077424791215,
0.0486840774247913,
0.048684077424791104,
0.048684077424791306,
0.04868407742479132,
0.0486840774247913,
0.048684077424791104,
....
编辑 2:
Mozway 的参考图片。下图所示为网格面积的一半。等间距的点是蓝色的,但我应该能够控制网格内有多少点,从而控制点的稀疏程度。
[![下图][2]][2]
【问题讨论】:
标签: python arrays numpy for-loop continue