python三角斜边_多面体的Delaunay三角化(Python)

我试图在python中获得Delaunay Triangulation的多面体,以便我可以计算质心.我看到scipy.spatial中有一个Delaunay函数,它在n维中起作用.问题是文档显示了二维使用,并没有告诉我如何处理更高的尺寸.能够将这个对象分解成数组可能会为我解决这个问题,但我不知道该怎么做.

我遇到的问题是我不知道如何在输出对象时验证这是否正常工作.我在Google上找不到关于如何绘制多面体图形或者如何使用scipy随后吐出的这个对象的信息.

如果我做

import numpy as np

from scipy.spatial import Delaunay

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

Delaunay(points)

我真的希望能够找回这些四面体的坐标,这样我就可以计算出多面体的质心.如果我能够绘制tesselated多面体也是非常好的.我在MATLAB中看到我可以用一个名为trimesn的函数做到这一点,我在matplotlib中找到了一个,但它似乎真的不同,它的文档也不是很好.

from matplotlib.collections import TriMesh TriMesh.__doc__

u'\n Class for the efficient drawing of a triangular mesh using\n

Gouraud shading.\n\n A triangular mesh is a

:class:`~matplotlib.tri.Triangulation`\n object.\n '

解决方法:

什么tess = Delaunay(pts)返回是Delanauy类的一个对象.您可以将四面体检查为tess.simplices.它有不同的属性和方法.例如,在2D中,它可以绘制三角剖分,凸包和Voronoi tesselation.

关于四面体最终集合的可视化,我没有找到一种直接的方法,但我设法获得了一个工作脚本.检查下面的代码.

from __future__ import division

import numpy as np

from scipy.spatial import Delaunay

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection

from itertools import combinations

def plot_tetra(tetra, pts, color="green", alpha=0.1, lc="k", lw=1):

combs = combinations(tetra, 3)

for comb in combs:

X = pts[comb, 0]

Y = pts[comb, 1]

Z = pts[comb, 2]

verts = [zip(X, Y, Z)]

triangle = Poly3DCollection(verts, facecolors=color, alpha=0.1)

lines = Line3DCollection(verts, colors=lc, linewidths=lw)

ax.add_collection3d(triangle)

ax.add_collection3d(lines)

pts = np.array([

[0,0,0],

[1,0,0],

[1,1,0],

[1,0,1],

[1,1,1],

[0,1,0],

[0,1,1],

[0,0,1]])

tess = Delaunay(pts)

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

for k, tetra in enumerate(tess.simplices):

color = plt.cm.Accent(k/(tess.nsimplex - 1))

plot_tetra(tetra, pts, color=color, alpha=0.1, lw=0.5, lc="k")

ax.scatter(pts[:, 0], pts[:, 1], pts[:, 2], c='k')

plt.savefig("Delaunay.png", dpi=600)

plt.show()

得到的图像是

标签:python,matplotlib,scipy,delaunay,polyhedra

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值