ドロネー三角形 matplotlibで

いままで気がつかなかったのですが、matplotlibにも、ドロネー三角形を作成するモジュールがありました。使い方メモ。

# -*- coding: utf8 -*-
"""example for matplotlib.delaunay.triangulate
ドロネー三角形サンプルコード"""

import matplotlib.pyplot as plt
from matplotlib.delaunay.triangulate import Triangulation
import numpy as np

#matplotlib 初期化
plt.interactive(True)
fig=plt.figure(111)
fig.clear()
ax = fig.add_subplot(111)

#ランダムな点を作成
x=np.random.randn(100) # X 座標
y=np.random.randn(100) # Y 座標

#点からドロネー三角形を作成
tri=Triangulation(x,y) # 

plt.plot(x,y,"ro") #赤で点を表示

#エッジの連結順序を取り出し
for edge  in tri.edge_db:
    i , j = edge
    # i 番目の点と j 番目の点を連結する線を引く
    plt.plot( [x[i],x[j]], [y[i],y[j]] ,"b") #青で線を引く
    #
    #plt.plot( x[edge], y[edge], "b" ) #ホントは、こう書いたほうが速い

plt.show() # IDLEから起動するときはコメントアウト

サンプルコードでは画面表示を伴ってるので点100個ぐらいでもちょっと重いですが、点を与えてドロネー三角形に分割するだけなら 千個ぐらいの点でも一瞬です。

こっちのほうがOpenCVを使うよりも断然 お手軽ですね。もっと早く知りたかったですw 連結順序だけでなく、個々の三角形として取り出す方法もあるようです。

これは、主として、matplotlib.mlab.griddata関数から使うために用意されているようです。

matplotlib.mlab.griddata(x, y, z, xi, yi, interp=’nn’)

Cookbook / Matplotlib / Gridding irregularly spaced data

コメントを残す

メールアドレスが公開されることはありません。