【问题标题】:Plot mesh stored as vertices and faces绘制存储为顶点和面的网格
【发布时间】:2019-06-13 00:53:20
【问题描述】:

我有一个网格存储为 3D 面和顶点的集合,例如

v = np.array([[0,0,0],
              [1,0,0],
              [1,1,0],
              [0,1,0],
              [0,0,1],
              [1,0,1],
              [1,1,1],
              [0,1,1]])
f = np.array([[0,2,1],
              [0,3,2],
              [1,2,6],
              [1,6,5],
              [0,5,4],
              [0,1,5],
              [4,5,6],
              [6,7,4],
              [3,7,6],
              [6,2,3],
              [0,4,7],
              [7,3,0]])

其中v 描述了节点的坐标,f 描述了每个面的顶点索引。

我有一个向量C,每个节点都包含一个标量,例如

C = np.array([1,2,3,4,5,6,7,8])

我想使用C 中的标量将其绘制为网格,作为每个节点的颜色图。这类似于在 Matlab 中使用patch('Faces',F,'Vertices',V) 命令(doc)实现的功能

是否可以使用 matplotlib 或更一般地使用 python 来实现这一点?

额外问题:

更一般地说,我的脸可以有可变数量的顶点。在我的矩阵中,我有三面和四面,其中三面用 np.nan 作为第四个节点填充。

是否可以绘制具有 3 面和 4 面的网格而不将四边形分成三面?

【问题讨论】:

    标签: python python-3.x matplotlib


    【解决方案1】:

    您可以使用面的边坐标绘制Poly3DCollection v[f]

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D, art3d
    
    v = np.array([[0,0,0], [1,0,0], [1,1,0], [0,1,0], 
                  [0,0,1], [1,0,1], [1,1,1], [0,1,1]])
    
    f = np.array([[0,2,1], [0,3,2], [1,2,6], [1,6,5],
                  [0,5,4], [0,1,5], [4,5,6], [6,7,4],
                  [3,7,6], [6,2,3], [0,4,7], [7,3,0]])
    
    C = np.array([1,2,3,4,5,6,7,8,2,3,4,5])
    
    
    fig = plt.figure()
    ax = fig.add_subplot(projection="3d")
    
    norm = plt.Normalize(C.min(), C.max())
    colors = plt.cm.viridis(norm(C))
    
    pc = art3d.Poly3DCollection(v[f], facecolors=colors, edgecolor="black")
    ax.add_collection(pc)
    
    plt.show()
    

    请注意,您需要为面着色,而不是节点(因为节点不能有颜色) - 所以我在 C 中发明了更多值。

    【讨论】:

    • 不可能有像uk.mathworks.com/help/examples/graphics/win64/…这样的阴影面吗?
    • 没有什么是不可能的。但是没有内置选项。可以考虑将每个面子采样成几个新面,每个面都有自己的颜色。如果你问我,那就太复杂了。
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多