您可以使用法线和点以矢量方式定义平面。要找到法线,您需要计算由三个点定义的两个向量的叉积。
然后使用该法线和其中一个点将平面放置在空间中。
使用 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 - 同时绘制 3D 平面和点 https://stackoverflow.com/questions/36060933/matplotlib-plot-a-plane-and-points-in-3d-simultaneously
在 Matlab 或 matplotlib 中根据法向量和点绘制平面 https://stackoverflow.com/questions/3461869/plot-a-plane-based-on-a-normal-vector-and-a-point-in-matlab-or-matplotlib/12503243