【问题标题】:Plot unstructured triangular surfaces Python绘制非结构化三角形曲面 Python
【发布时间】:2020-10-30 21:02:42
【问题描述】:

我正在尝试绘制由 >10000 个非结构化三角形创建的曲面。我有三角形点的坐标和每个三角形点列表。我的数据如下,

0.1 0.2 0.1
0.2 0.4 0.6
0.4 0.6 0.4
.
.
.
1 2 3
.
.
.

前三行是点的坐标(-X,Y,Z COORDINATES-)(第 1 行中的点 1,第 2 行中的点 2 等)。点数超过10000。 “1 2 3”表示我们有一个三角形,其中的角点是 1、2 和 3。 所以,我想通过从第一个三角形开始并一一绘制来绘制曲面。我尝试按照上述程序进行操作,但我没有得到正确的数字,最后我收到以下错误消息。

图形大小 432x288,0 轴

我已经尝试了以下代码。

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)

很高兴听到您的意见。

【问题讨论】:

    标签: python python-3.x matplotlib


    【解决方案1】:

    plo_trisurf 函数完全符合您的要求。

    • x, y, z 是三角形的节点
    • tri 包含三角形节点的索引

    一个小例子:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    x = np.array([0, -1, 1, 1])
    y = np.array([0, 1, -1, 1])
    z = np.array([0, 1, 1, -1])
    
    tri = np.array([[0, 1, 2],
                    [0, 1, 3],
                    [0, 2, 3]])
    
    fig = plt.figure()
    ax = fig.add_subplot(projection='3d')
    ax.plot_trisurf(x, y, z, triangles=tri)
    

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 2023-03-27
      • 2014-12-10
      • 2011-11-29
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多