如何在mayavi中从delaunay滤镜中提取三角形?
我想像matplotlib一样提取三角形。
import numpy as np
import matplotlib.delaunay as triang
from enthought.mayavi import mlab
x = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
z = np.zeros(9)
#matplotlib
centers, edges, triangles_index, neig = triang.delaunay(x,y)
#mayavi
vtk_source = mlab.pipeline.scalar_scatter(x, y, z, figure=False)
delaunay = mlab.pipeline.delaunay2d(vtk_source)
我想从mayavi delaunay filter中提取三角形,以获得变量@triangle_index和@centers (就像matplotlib一样)
我发现的唯一一件事就是这个http://docs.enthought.com/mayavi/mayavi/auto/example_delaunay_graph.html
但仅获取边缘,并且编码不同于matplotlib
发布于 2013-05-10 01:55:49
要获取三角形索引,请执行以下操作:
poly = delaunay.outputs[0]
tindex = poly.polys.data.to_array().reshape(-1, 4)[:, 1:]
poly
是一个PolyData对象,poly.polys
是一个存储索引信息的CellArray对象。有关CellArray的详细信息,请访问:http://www.vtk.org/doc/nightly/html/classvtkCellArray.html
为了得到每个外接圆的中心,你需要循环每个三角形并计算中心:
centers = []
for i in xrange(poly.number_of_cells):
cell = poly.get_cell(i)
points = cell.points.to_array()[:, :-1].tolist()
center = [0, 0]
points.append(center)
cell.circumcircle(*points)
centers.append(center)
centers = np.array(centers)
cell.circumcircle()
是一个静态函数,因此您需要将三角形的所有点作为参数传递,通过修改第四个参数将返回中心数据。
下面是完整的代码:
import numpy as np
from enthought.mayavi import mlab
x = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
z = np.zeros(9)
vtk_source = mlab.pipeline.scalar_scatter(x, y, z, figure=False)
delaunay = mlab.pipeline.delaunay2d(vtk_source)
poly = delaunay.outputs[0]
tindex = poly.polys.data.to_array().reshape(-1, 4)[:, 1:]
centers = []
for i in xrange(poly.number_of_cells):
cell = poly.get_cell(i)
points = cell.points.to_array()[:, :-1].tolist()
center = [0, 0]
points.append(center)
cell.circumcircle(*points)
centers.append(center)
centers = np.array(centers)
print centers
print tindex
输出为:
[[ 1.5 0.5]
[ 1.5 0.5]
[ 0.5 1.5]
[ 0.5 0.5]
[ 0.5 0.5]
[ 0.5 1.5]
[ 1.5 1.5]
[ 1.5 1.5]]
[[5 4 2]
[4 1 2]
[7 6 4]
[4 3 1]
[3 0 1]
[6 3 4]
[8 7 4]
[8 4 5]]
结果可能与matplotlib.delaunay
不同,因为有许多可能的解决方案。
https://stackoverflow.com/questions/16470040
复制相似问题