python - 使用python显示顶点的3D法线向量
问题描述
我正在使用python来显示一些 3D 点,并且我有所有点的 xyz 坐标以及它们的(单位)法线向量坐标。
我已经绘制了 3D 点,但我不知道如何绘制法线向量。
一些代码片段是:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
# P contains point coordinates and normal vector coordinates
def drawPoints(P):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, facecolor="1.0")
ax = fig.gca(projection='3d')
x = P[:, 0]
y = P[:, 1]
z = P[:, 2]
ax.scatter(x, y, z, alpha=0.8, color="red", edgecolors='none', s=5)
nv_x = P[:, 3]
nv_y = P[:, 4]
nv_z = P[:, 5]
# I don't know how to draw normals
plt.show()
我想要的结果是在每个顶点的顶部显示法线向量。谢谢!
解决方案
就像@Scott 说的,我们可以用mayavi
它来可视化它。
from mayavi.mlab import *
def displayPointsAndNormals(P, N):
x = P[:, 0]
y = P[:, 1]
z = P[:, 2]
points3d(x, y, z, color=(0, 1, 0), scale_factor=0.01)
u = N[:, 0]
v = N[:, 1]
w = N[:, 2]
quiver3d(x, y, z, u, v, w)
show()
结果是这样的:
数据取自此存储库。
推荐阅读
- javascript - 如何使用 sinon 存根交叉获取
- reactjs - 如何在下一个js中监听文档滚动高度的变化?
- java - 错误 404:javax.servlet.UnavailableException:SRVE0201E:Servlet [org.glassfish.jersey.servlet.ServletContainer]:不是 servlet 类
- transpose - 在查询中转置数据
- python - Django 不发送带有附加 zip 文件的电子邮件
- javascript - 如何将函数内数组的值推送到空的全局数组
- css - scss - 设置父级似乎不起作用
- javascript - 我想选择一个没有父元素的子元素选择
- sql - 如何在SQL中从一个表中选择所有内容并从另一个表中选择一行
- r - R:将组中的所有字符串组合成一行