python-3.x - 如何用 3 个点定义一个平面,并在 3D 中绘制它?
问题描述
我在 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 空间中绘制它。
解决方案
您使用法线和点以矢量方式定义平面。要找到法线,您需要计算由三个点定义的两个向量的叉积。
然后你使用这个法线和其中一个点将平面放置在空间中。
使用 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 中
绘制平面和点 根据法线向量和 Matlab 或 matplotlib 中的点绘制平面
推荐阅读
- javascript - 如何修复 websocket 错误:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET
- ios - Visual Studio Mac 和 VS2019 Xamarin 都无法打开 Storyboard
- deployment - 如果 Windows 可以识别但 Visual Studio 2017 不能识别,我是否还需要手机驱动程序?
- django - Selenium 与 Python - 消息:“operadriver”可执行文件需要在 PATH 中
- c# - 如何在隐身模式下运行测试?
- matlab - 如何创建一个八度函数来仅评估向量中奇数的总和?
- microsoft-translator - DocumentTranslator 应用程序是否支持 Azure 中国翻译服务?
- c# - 如何使用 C# 在 excel 中的同一单元格中使用多种颜色
- r - r studio中滚动条的编织器
- javascript - 当我在模型上传递字符串时,为什么在 ASP.net Core MVC 中会导致 Javascript 错误?