【问题标题】:How to define a plane with 3 points, and plot it in 3D? [closed]如何用 3 个点定义一个平面,并在 3D 中绘制它? [关闭]
【发布时间】:2019-05-10 22:30:46
【问题描述】:

我在 3D 空间中有 3 个点,我想在 3D 中定义一个穿过这些点的平面。

      X       Y       Z
0   0.65612 0.53440 0.24175
1   0.62279 0.51946 0.25744
2   0.61216 0.53959 0.26394

我还需要在 3D 空间中绘制它。

【问题讨论】:

    标签: python-3.x matplotlib geometry mplot3d


    【解决方案1】:

    您使用法线和点以矢量方式定义平面。要找到法线,您需要计算由三个点定义的两个向量的叉积。

    然后你使用这个法线和其中一个点将平面放置在空间中。

    使用matplotlib:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    points = [[0.65612, 0.53440, 0.24175],
               [0.62279, 0.51946, 0.25744],
               [0.61216, 0.53959, 0.26394]]
    
    p0, p1, p2 = points
    x0, y0, z0 = p0
    x1, y1, z1 = p1
    x2, y2, z2 = p2
    
    ux, uy, uz = u = [x1-x0, y1-y0, z1-z0]
    vx, vy, vz = v = [x2-x0, y2-y0, z2-z0]
    
    u_cross_v = [uy*vz-uz*vy, uz*vx-ux*vz, ux*vy-uy*vx]
    
    point  = np.array(p0)
    normal = np.array(u_cross_v)
    
    d = -point.dot(normal)
    
    xx, yy = np.meshgrid(range(10), range(10))
    
    z = (-normal[0] * xx - normal[1] * yy - d) * 1. / normal[2]
    
    # plot the surface
    plt3d = plt.figure().gca(projection='3d')
    plt3d.plot_surface(xx, yy, z)
    plt.show()
    

    其他有用的答案:
    Matplotlib - Plot a plane and points in 3D simultaneously
    Plot a plane based on a normal vector and a point in Matlab or matplotlib

    【讨论】:

    • 有没有办法在 (0 和 1) 的范围内做到这一点 xx, yy = np.meshgrid(range(10), range(10))?并可视化向量和法线?
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多