如何在Python中绘出三维形状的外部,而不定义其面?

2024-05-18 06:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python Plotly绘制一些3D形状。为了练习,我试着画一个立方体

我尝试了Isosurface命令,因为我只对形状的外部感兴趣,但令人惊讶的是,输出不是立方体

import plotly.graph_objects as go
import numpy as np 

x=[0, 0, 1, 1, 0, 0, 1, 1]
y=[0, 1, 1, 0, 0, 1, 1, 0]
z=[0, 0, 0, 0, 1, 1, 1, 1]

myisosurf = go.Isosurface(x=x,y=y,z=z,value= np.ones(len(x)))
fig = go.Figure(data=myisosurf)
fig.show()

plotly isosurface output when plotting a cube

我确实让它使用了Mesh3D命令(得到了here的一点帮助),但它还需要设置i, j, k的参数,这一事实使我更喜欢一种更简单的方法。尤其是在处理比立方体更复杂的形状时,设置i, j, k参数将非常困难

i= [7, 0, 0, 0, 4, 4, 6, 1, 4, 0, 3, 6]
j= [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k= [0, 7, 2, 3, 6, 7, 1, 6, 5, 5, 7, 2]

my3dmesh = go.Mesh3d(x=x,y=y,z=z, i=i, j=j, k=k, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()

Cube with Mesh3D

如何让Python绘图仪显示形状的外部,而不通过i,j,k参数手动定义其面


Tags: import命令godata参数asshownp
1条回答
网友
1楼 · 发布于 2024-05-18 06:34:33

多亏了@Adreas Deak的评论,Mesh3D命令的alphahull parameter似乎可以通过绘图来显示输入中坐标的凸包

如果没有alphahull参数(或使用alphahull = -1),则使用i, j, k参数值,使用Delaunay三角剖分来计算坐标周围的面。 使用alphahull = 0时,凸包方法用于计算坐标周围的面,从而只产生形状的“外部”,而无需设置i, j, k参数

因此:

import plotly.graph_objects as go
import numpy as np 

my3dmesh = go.Mesh3d(x=x,y=y,z=z, alphahull = 0, intensity = np.linspace(1, 1, 8, endpoint=True),name='y')
fig = go.Figure(data=my3dmesh)
fig.show()

enter image description here

相关问题 更多 >