2012-04-02 3 views
2

나는 Fraunhofer 회절에 대한 시뮬레이션을하고 싶고 그 목적을 위해 numpy와 matplotlib를 사용하기로했다. 내가해야할 것은 2D 애 퍼처 함수를 지정하는 것입니다. 따라서 x와 y 값의 meshgrid를 만들고 함수 z (x, y)를 할당 할 수 있습니다.이 경우에는 복잡해야합니다. 이 모든 것은 너무 복잡하게 들리지는 않지만, 여기서 나는 문제에 부딪친 다.2 차원 메쉬 그리드에 기하학적 모양을 "그리는"방법은 무엇입니까?

메쉬 그리드 내부에 사각형 또는 삼각형 조각을 정의하여 기하학적 그림 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_) 

다음에 무엇을?

  • 는 PNG를 가져 PNG 파일 다른 색
  • 저장을 도면을 사용하여하기 matplotlib에게 Z 값을
  • 인코딩을 사용하여 그림을 그린다

    는 I 다르게 문제를 해결하려고 numpy 배열로하고 색상을 디코딩.

그러나 이것은 다른 접근법을 찾는 주된 이유 인 z 함수에 의해 취해진 값에 심각한 제한을가합니다.

나를 도울 수있는 누구에게도 감사드립니다.

답변

2

가장 쉬운 두 가지 옵션은 matplotlib.nxutils.points_inside_poly을 사용하거나 mahotas.polygon.fill_polygon을 사용하는 것입니다. 후자는 조금 빠르지 만 mahotas을 설치해야합니다. 첫 번째 옵션의 예로서

:

(부울 NumPy와 배열) 수득
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 

: nxutils 어떤 시점에서 상각 될 예정 메모 측면

[[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]] 

, 일부 길 방법에 대한 호의. 앞으로는 다음 행을 따라 무언가를하고 싶을 것입니다.

from matplotlib import path 

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

그러나 지금은 github 헤드에만 있습니다.

+0

이와 같은 자세한 답변을 주셔서 대단히 감사합니다. 너는 내 하루를 보냈다. :) –