首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带scipy Delaunay的环形

带scipy Delaunay的环形
EN

Stack Overflow用户
提问于 2021-01-13 22:05:42
回答 1查看 64关注 0票数 0

我尝试绘制表示环形的三维实体。我已经使用scipy模块和Delaunay进行了计算。不幸的是,该图显示的是一个3d圆柱体,而不是一个环形空间。有人知道如何修改代码吗?scipy是正确的模块吗?我可以使用三角形的Delaunay吗?提前感谢!

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.spatial import Delaunay

points = 50

theta = np.linspace(0,2*np.pi,points)
radius_middle = 7.5
radius_inner = 7
radius_outer = 8

x_m_cartesian = radius_middle * np.cos(theta)
y_m_cartesian = radius_middle * np.sin(theta)
z_m_cartesian = np.zeros(points)
M_m = np.c_[x_m_cartesian,y_m_cartesian,z_m_cartesian]

x_i_cartesian = radius_inner * np.cos(theta)
y_i_cartesian = radius_inner * np.sin(theta)
z_i_cartesian = np.zeros(points)
M_i = np.c_[x_i_cartesian,y_i_cartesian,z_i_cartesian]

x1_m_cartesian = radius_middle * np.cos(theta)
y1_m_cartesian = radius_middle * np.sin(theta)
z1_m_cartesian = np.ones(points)
M1_m = np.c_[x1_m_cartesian,y1_m_cartesian,z1_m_cartesian]

x2_i_cartesian = radius_inner * np.cos(theta)
y2_i_cartesian = radius_inner * np.sin(theta)
z2_i_cartesian = np.ones(points)
M2_i = np.c_[x2_i_cartesian,y2_i_cartesian,z2_i_cartesian]

M = np.vstack((M_m,M_i,M1_m,M2_i))

# Delaunay
CH = Delaunay(M).convex_hull

x,y,z = M[:,0],M[:,1],M[:,2]

fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111,projection='3d')
#ax.scatter(x[:,0],y[:,1],z[:,2])
ax.plot_trisurf(x,y,z,triangles=CH, shade=False, color='lightblue',lw=1, edgecolor='k')

plt.show()
EN

回答 1

Stack Overflow用户

发布于 2021-04-29 21:45:56

正如评论中所指出的,凸壳是凸形的,因此不能表示环空。但是,concave hull (也称为alpha-shape)的概念可能适合您的需要。基本上,alpha形状从Delaunay三角剖分中删除了外圆半径大于某个值(由alpha参数定义)的三角形(在3D情况下为四面体)。

This answer为3D点提供了alpha形状曲面(即外部边界)的实现。使用该答案中的alpha_shape_3D函数,alpha值为3,结果如下图所示。

代码中的以下两行(替换了对CH和绘图函数的赋值)完成了这项工作。

代码语言:javascript
复制
vertices, edges, facets = alpha_shape_3D(pos=M, alpha=3.)

ax.plot_trisurf(x,y,z,triangles=facets, shade=False, color='lightblue',lw=1, edgecolor='k')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65703543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档