2014-05-14 2 views
4

나는 scipy.spatial.Voronoi diagramt에서 가장자리를 얻으려고 많은 시간을 보냈다.보로 노이 다이어그램 가장자리 : scipy.spatial.Voronoi 객체에서 (point1, point2) 형태로 모서리를 얻는 방법?

points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], 
[2, 0], [2, 1], [2, 2]]) //Or feel free to use any set of points 

후 다음과 같은 개체 속성에 액세스 할 수 있습니다 : 당신이 그렇게 같은 보로 노이 다이어그램 작성하는 경우 http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.spatial.Voronoi.html

다음은 주요 문서입니다

vor.regions 
vor.max_bound 
vor.ndim 
vor.ridge_dict 
vor.ridge_points 
vor.ridge_vertices 
vor.npoints 
vor.point_region 
vor.points 

을하지만 방법 불분명하다 이들을 결합하여 2 차원 보로 노이 다이어그램의 형태 (point1, point2)로 모서리를 얻으시겠습니까? 난 당신이 다음을 수행 할 수 있기 때문에 당신은 보로 노이 다이어그램과 edgres과 정점을 그릴 수 있기 때문에 가장자리가 존재 알고 명확 보로 노이 edgres을 묘사

voronoi_plot_2d(vor) 
plt.show() 

enter image description here

- 그들과 목록을 얻는 방법을 자신의 시작과 끝점? 그 좋아 난 단지 솔리드 엣지 (안 플롯 떨어져 무제한의가는 점선들)

답변

4

ridge_vertices 속성을 살펴보십시오 얻는 경우 :

ridge_vertices (list of list of ints, shape (nridges, *)) 
     Indices of the Voronoi vertices forming each Voronoi ridge. 

그 목록의 각 요소는 정수의 쌍을 . 각 정수는 vertices 목록에있는 색인입니다. 따라서 각 요소는 보로 노이 다이어그램에 그려지는 선을 정의합니다. 인덱스 -1은 "무한대"에있는 점을 의미합니다.

여기에 보로 노이 다이어그램의 선을 그립니다 스크립트입니다 :

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.spatial import Voronoi 


points = np.array([[0, 0], [0, 1], [0, 2], 
        [1, 0], [1, 1], [1, 2], 
        [2, 0], [2, 1], [2, 2]]) 

vor = Voronoi(points) 


fig = plt.figure() 
plt.hold(True) 

# Mark the Voronoi vertices. 
plt.plot(vor.vertices[:,0], vor.vertices[:, 1], 'ko', ms=8) 

for vpair in vor.ridge_vertices: 
    if vpair[0] >= 0 and vpair[1] >= 0: 
     v0 = vor.vertices[vpair[0]] 
     v1 = vor.vertices[vpair[1]] 
     # Draw a line from v0 to v1. 
     plt.plot([v0[0], v1[0]], [v0[1], v1[1]], 'k', linewidth=2) 

plt.show() 

을 생성한다 :

Voronoi edges

+0

멋진가! 미래의 시청자를 위해 기본 통찰력은 vor.ridge_vertices가 vor.vertices 배열에 인덱스를 제공한다는 것입니다. 이것이 바로 가장자리를 얻는 방법입니다! 환상적. 감사. – cgnorthcutt

관련 문제