这是一个微不足道的问题,但我一次又一次地遇到它,我确信有一个优雅的解决方案,我想使用它。我用 numpy 做数学,想绘制线性代数计算结果的线。这些行的形式为 因此,我想将查找线条起始端点的工作“外包”给一个聪明的 python 代码片段,以便将生成的线条绘制到我的 3D 绘图中,从而尊重绘图的现有尺寸。例如,如果我从 x = -2 到 2 和 z = -3 到 3 绘制一条 3D 平行线,并且我想画一条线 ,它会发现它需要从 (-2,1,-2) 开始并结束于 (2,1,2)。这怎么可能行得通呢?
1 回答
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
首先,定义projection参数很重要。其次,您需要使用不同形状的P, v,z以获得与方法坐标相对应的X, Y,参数:Zplot
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
P = np.array([1,1,1]).reshape(-1,1)
v = np.array([1,0,1]).reshape(-1,1)
z = np.linspace(-3,3,100)
X, Y, Z = P + v*z
ax.plot(X, Y, Z)
plt.show()
根据评论
reshape(-1, 1)
添加了广播所需的额外维度。它也是 的替代品reshape(3, 1)
。简单情况 ( arr1 = v
; arr2 = np.linspace(-3,3,11)
) 可以像这样可视化:
曲线的终点g = (1, 1, 1) + z * (1, 0, 1)
位于 的区间边界处z
,即:
g1 = (1, 1, 1) + (-3) * (1, 0, 1) = (-2, 1, -2) g2 = (1, 1, 1) + 3 * (1, 0, 1) = (4, 1, 4)
请注意,z = 1
需要获得终点 =(2,1,2)
添加回答
举报
0/150
提交
取消