- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试获取 Delaunay Triangulation python 中的多面体,以便我可以计算质心。我看到有一个 Delaunay scipy.spatial
中的函数,它在 n 维空间中工作。问题是文档显示了 2D 使用,但没有给我指示如何处理更高维度。能够将这个对象分解成一个数组可能会为我解决这个问题,但我不知道该怎么做。
我遇到的问题是我不知道如何验证它在输出对象时是否正常工作。我在谷歌上找不到任何关于如何绘制多面体或如何使用 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)
我真的很想能够取回这些四面体的坐标,以便计算多面体的质心。如果我也能画出镶嵌多面体的图形,那就太好了。我在 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 镶嵌。
关于最终四面体集合的可视化,我没有找到直接的方法,但我设法获得了一个工作脚本。检查下面的代码。
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 - 多面体的 Delaunay 三角化(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820373/
稍后编辑:我上传了here我的原始数据的样本。它实际上是DICOM格式的分割图像。该结构的体积约为16 mL,因此我假设内部椭球体的体积应小于该体积。从DICOM图像中提取点,我使用了以下代码: im
我一直在寻找任何 C++ 库,它允许我获得线和多面体/球体之间的 3D 碰撞点(其中线由两个 3D 点和有限数量的 3D 点组成的多面体) 令我惊讶的是,我似乎找不到这样的库(或者我不知道要搜索哪些短
当我们尝试保存值时,为什么 PostGIS 不验证 GEOMETRY 字段的 longitude 和 latitude latitude 大于 90(latitude > 90)? 最佳答案 看看这张
我正在尝试使用 Wicket 插件制作一个多面体对象。我开始使用该插件,但现在我有点飘飘然了。如果我能弄清楚如何使用它,那将对我有很大帮助。 我也是 leaflet 的新手,并不真正理解文档中关于多面
除了这个之外,还有其他方法可以在 Three.js 中创建多边形/多面体吗? var polyhedronPts = []; polyhedronPts.push( new THREE.Vector2
我有这个几何形状文件,所以没有城市 map 。 我将其作为 GeoJson 存储在 GIS 数据库中。现在,我想可视化 geojson 数据。我首先使用 QGIS 创建了 GeoJson 数据并将其导
有没有模拟 3D polyhedra 的 JavaScript 库?使用 Canvas 标签或 SVG?假设我想制作 Platonic solids 的效果图,我将如何最好地实现这一目标? FWIW,
我一直在利用空闲时间编写一个游戏引擎,但为了让碰撞发挥作用,我被困了几个星期。 目前我用 AABB 表示实体的碰撞体,关卡的碰撞体由一个相当简单(但不一定是凸面)的多面体表示。所有的绘图都是基于 sp
我需要找到一种方法来解决在不使用设计工具的情况下为非凸多面体生成纹理贴图的问题。具体来说,我将模拟结果数据映射到 3D 表面上。也就是说,在代码中(最好是 C# 或 VB,因为我的目标是 WPF 3D
我是一名优秀的程序员,十分优秀!