如何在二维网格上绘制几何图形?

2024-09-30 01:20:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如何定义网格内的矩形或三角形部分,使几何图形内部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的取值有严格的限制,这也是我寻找不同方法的主要原因。在

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


Tags: 函数numpy网格示例定义pngmatplotlib颜色
1条回答
网友
1楼 · 发布于 2024-09-30 01:20:45

最简单的两个选项是使用^{}或使用^{}。后者稍快一些,但需要安装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

产生(一个布尔numpy数组):

^{pr2}$

顺便说一句,nxutils将在某个时刻贬值,以支持某些路径方法。将来,您可能会想按照以下思路做一些事情:

from matplotlib import path

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

不过,这只是一时的事。在

相关问题 更多 >

    热门问题