gpt4 book ai didi

python - 如何 "draw"二维网格上的几何形状?

转载 作者:行者123 更新时间:2023-12-01 15:00:56 25 4
gpt4 key购买 nike

我想对 Fraunhofer 衍射进行模拟,为此我选择使用 numpy 和 matplotlib。我需要做的是指定一个 2D 孔径函数,为此我可以创建一个 x 和 y 值的网格并分配一个函数 z(x,y),在这种情况下它应该是复杂的。所有这些听起来并不太复杂,但是我在这里遇到了一个问题。

如何在 meshgrid 中定义矩形或三角形 block ,使得几何图形内部 z=1 和外部 z=0?

最小的工作示例,从哪里开始:

#! /bin/usr/env python

# Import environment
import numpy as np

x_ = np.linspace(0,1,255)
y_ = np.linspace(0,1,255)
x,y = np.meshgrid(x_,y_)

接下来要做什么?

我试图以不同的方式解决问题:

  • 用matplotlib画图
  • 使用不同的颜色对 z 的值进行编码
  • 将图形保存为 png
  • 将 png 作为 numpy 数组导入并解码颜色。

但是,这对函数 z 所取的值施加了严格的限制,这是我寻找不同方法的主要原因。

非常感谢任何能帮助我的人。

最佳答案

两个最简单的选择是使用 matplotlib.nxutils.points_inside_poly或使用 mahotas.polygon.fill_polygon .后者要快一些,但需要安装 mahotas

以第一个选项为例:

import numpy as np
from matplotlib.nxutils import points_inside_poly

nx, ny = 10, 10
poly_verts = [(1,1), (5,1), (5,9),(3,2),(1,1)]

# Create vertex coordinates for each grid cell...
# (<0,0> is at the top left of the grid in this system)
x, y = np.meshgrid(np.arange(nx), np.arange(ny))
x, y = x.flatten(), y.flatten()

points = np.vstack((x,y)).T

grid = points_inside_poly(points, poly_verts)
grid = grid.reshape((ny,nx))

print grid

产生(一个 bool numpy 数组):

[[False False False False False False False False False False]
[False True True True True False False False False False]
[False False False True True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]]

附带说明一下,nxutils 将在某些时候贬值,以支持某些路径方法。将来,您可能希望按照以下方式做一些事情:

from matplotlib import path

...
p = path.Path(poly_verts)
grid = p.contains_points(points)
...

但是,目前仅在 github head 中。

关于python - 如何 "draw"二维网格上的几何形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com