【问题标题】:Plot surface between points in 3d space在 3d 空间中绘制点之间的曲面
【发布时间】:2021-02-19 18:47:17
【问题描述】:

我想用 Matplotlib 在一组点之间绘制一个实体表面。我要绘制的每个表面都位于 3D 空间中的 4 个点之间,并且这些点位于同一平面上(尽管它们的坐标可能会被截断,将点推离平面)。从“上方”看,这 4 个点可能如下所示:

请注意,这 4 个点不会形成完美的矩形。 如何在 Matplotlib 中绘制这 4 个点之间的曲面? 每个点都表示为 [x, y, z]。我知道plot_surface 函数,但不确定如何使用它在不是完美非旋转矩形的多边形中绘制曲面。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您可以使用ax.plot_trisurf 从三角形构造曲面:

    import numpy as np
    import matplotlib.pyplot as plt
    import mpl_toolkits.mplot3d as Axes3D
    
    X = np.array([-4.3, -3, 1.2, 1.1])
    Y = np.array([-2.3, 2, -4.5, 0.8])
    Z = np.array([1., 1., 1., 1.])
    
    fig = plt.figure(figsize=(8,8))
    ax = plt.axes(projection='3d')
    surf1 = ax.plot_trisurf(X, Y, Z, antialiased=True)
    
    plt.show()
    

    输出:

    如果您还想删除分割三角形的线,请将相同的 coloredgecolor 传递给 plot_trisurf

    【讨论】:

    • 谢谢,这看起来很有希望。但是,我遇到了一个问题。你对如何解决这个问题有什么建议吗?以下代码产生错误ValueError: x and y arrays must consist of at least 3 unique points:X = [-0.98424006, -0.35771427, -0.98424006, -0.35771427] Y = [-1.0222235, -1.0222235, -0.4215349, -, -8 = [-1.747597]。 1.3747598, -1.3747598] ax.plot_trisurf(X, Y, Z, antialiased=True)
    • @AntonGildebrand 我无法重现这种行为,因为这些坐标对我有用。
    • 对不起,我发布了错误的值。 The right ones: X = [-0.98424006, -0.35771427, -0.35771427, -0.98424006] Y = [-1.3747598, -1.3747598, -1.3747598, -1.3747598] Z = [-1.0222235, -1.0222235, -0.4215349, -0.4215349]
    • @AntonGildebrand 正如错误所说:绘制三角形需要 3 个点。如果您只有 2 个(因为您提供的 4 个中有 2 个是相同的),则程序无法画线。如果您不是因为错误而这样做并且想要规避此消息,只需更改相同 X/Y 对的第 6 位小数,使这些对的差值略大于 0。(例如 -0.9842405 和 - 0.98424006 作品)。
    • 这当然是一个解决方案,尽管有点丑陋的解决方案。奇怪的是,切换 Y/Z 坐标向量的顺序使它起作用(但当然会使平面看起来不对)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多