我正在尝试绘制使用>;创建的曲面;10000个非结构化三角形。我有三角形点的坐标和每个三角形点的列表。我的数据如下:
0.1 0.2 0.1
0.20.40.6
0.40.60.4
.
.
.
1 2 3
.
.
.
前三条线是点的坐标(-X,Y,Z坐标-)(第1行中的点1,第2行中的点2等)。点数超过10000。 “1233”表示我们有一个三角形,它的角点是1,2和3。 我想从第一个三角形开始,一个接一个地绘制曲面。我尝试按照上面的过程进行操作,但没有得到正确的数字,最后得到以下错误消息
Figure size 432x288 with 0 Axes
我尝试了以下代码
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
# from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
fileName = open('surface.txt','r')
print(fileName.readline())
dummy = fileName.readline().split()
npo = int(dummy[2])
nel = int(dummy[4])
xp = np.zeros([npo])
yp = np.zeros([npo])
zp = np.zeros([npo])
el1 = np.zeros([nel])
el2 = np.zeros([nel])
el3 = np.zeros([nel])
for i in range(0,npo):
dummy = fileName.readline().split()
xp[i] = float(dummy[0])
yp[i] = float(dummy[1])
zp[i] = float(dummy[2])
# print(i,xp[i],yp[i],zp[i])
for i in range(0,nel):
dummy = fileName.readline().split()
el1[i] = int(dummy[0])
el2[i] = int(dummy[1])
el3[i] = int(dummy[2])
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, projection='3d')
for i in range(0,nel):
x1 = xp[int(el1[i])-1]
y1 = yp[int(el1[i])-1]
z1 = zp[int(el1[i])-1]
x2 = xp[int(el2[i])-1]
y2 = yp[int(el2[i])-1]
z2 = zp[int(el2[i])-1]
x3 = xp[int(el3[i])-1]
y3 = yp[int(el3[i])-1]
z3 = zp[int(el3[i])-1]
xarr = [x1,x2,x3,x1]
yarr = [y1,y2,y3,y1]
zarr = [z1,z2,z3,z1]
verts = [list(zip(xarr,yarr,zarr))]
ax2.add_collection3d(Poly3DCollection(verts))
ax2.set_xbound(0,1)
ax2.set_ybound(0,1)
ax2.set_zbound(0,3)
我很乐意听取你的意见
函数
plo_trisurf
正是您想要的x, y, z
是三角形的节点tri
包含三角形节点的索引一个小例子:
相关问题 更多 >
编程相关推荐