【问题标题】:How to use numpy to build a 3D-model?如何使用 numpy 构建 3D 模型?
【发布时间】:2018-11-01 02:53:29
【问题描述】:

原创(2018.11.01)

我有 3 个 numpy:x、y、z,由我的激光扫描仪创建(40 度 / 1 步)。 我想用它们来构建一个 3D 模型。

我觉得应该是matplotlib.tri
但我不知道确定三角数据

这是我的数据:https://www.dropbox.com/s/d9p62kv9jcq9bwh/xyz.zip?dl=0

原型号:https://i.imgur.com/XSyONff.jpg

代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.tri as mtri    

x_all=np.load("x.npy")
y_all=np.load("y.npy")
z_all=np.load("z.npy")

tri = #I have no idea...

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(x_all,y_all,z_all,triangles=tri.triangles)

非常感谢。

更新(2018.11.02)

我尝试这种方式来确定三角数据 Delaunay Triangulation of points from 2D surface in 3D with python?

代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.tri as mtri
from stl import mesh

x_all=np.load("x.npy")
y_all=np.load("y.npy")
z_all=np.load("z.npy")

model=np.vstack((x_all,y_all,z_all))
model=np.transpose(model)
model -= model.mean(axis=0)
rad = np.linalg.norm(model, axis=1)
zen = np.arccos(model[:,-1] / rad)
azi = np.arctan2(model[:,1], model[:,0])

tris = mtri.Triangulation(zen, azi)

plt.show()

我的模型看起来像:

https://i.stack.imgur.com/KVPHP.png

https://i.stack.imgur.com/LLQsQ.png

https://i.stack.imgur.com/HdzFm.png

虽然它有更好的表面,但我的模型上有一个大洞。有修复它的想法吗?

【问题讨论】:

  • 可能以zipdstack 开头以将坐标放入单个数组中?

标签: python python-3.x


【解决方案1】:

假设您想降低复杂性,即在文件中找到三角形以降低复杂性。您可能会考虑将凸包拟合到您的点,请参阅here 了解更多信息

根据您提供的文件,这会生成对象的冲浪图。

from numpy import load, stack
from matplotlib.pyplot import subplots
from mpl_toolkits.mplot3d import Axes3D
from scipy import spatial


x = load("x.npy")
y = load("y.npy")
z = load("z.npy")
points = stack((x,y,z), axis = -1)

v = spatial.ConvexHull(points)
fig, ax = subplots(subplot_kw = dict(projection = '3d'))
ax.plot_trisurf(*v.points.T, triangles = v.simplices.T)
fig.show()

【讨论】:

  • 谢谢你的回答,但是你的模型有很多洞。我的目的是没有任何孔,以便可以为 3D 打印机传输 stl 文件。
  • 你的孔到底是什么意思?物体不应该是空心的吗?根据原始数据,这似乎是一个上限。如果数据不应该是空心的,您可以对每个 z 的 x,y 平面进行三角剖分。
  • 其实我原来的模型是一个圆柱体(i.imgur.com/XSyONff.jpg)。我的目的是让它的表面喜欢它。
猜你喜欢
  • 2017-11-03
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多