我需要制作一个带有交叉平面的图,类似于问题中提到的图:How to draw intersecting planes?。该问题中接受的答案是tcaswell代码很好(代码如下)。
在该代码中,使用了var angle
,它显然控制了每个平面之间的角度。对于较小的值,它当然表现得像那样,但对于较大的值,它不会。
例如,这些是值angle = 0.25, 0.5, 1, 5, 50, 100
的结果。
变量显然对平面之间的角度有影响,但它也控制了倾斜平面的延伸。起初我虽然angles
以弧度表示,但事实并非如此。它也没有以度数表示,如上图所示,它们之间似乎永远不会达到90º角。
然后问题是:变量是做什么的?,并且:我如何控制平面之间的角度?
代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
dim = 10
# Define x,y plane.
X, Y = np.meshgrid([-dim, dim], [-dim, dim])
Z = np.zeros((2, 2))
# Define inclined plane.
angle = 0.5 # <-- This is the variable
X2, Y2 = np.meshgrid([-dim, dim], [0, dim])
Z2 = Y2 * angle
X3, Y3 = np.meshgrid([-dim, dim], [-dim, 0])
Z3 = Y3 * angle
# Plot x,y plane.
ax.plot_surface(X, Y, Z, color='gray', alpha=.5, linewidth=0, zorder=1)
# Plot top half of inclined plane.
ax.plot_surface(X2, Y2, Z2, color='blue', alpha=.5, linewidth=0, zorder=3)
# Plot bottom half of inclined plane.
ax.plot_surface(X2, Y3, Z3, color='blue', alpha=.5, linewidth=0, zorder=-1)
ax.set_xlim(-10., 10.)
ax.set_ylim(-10., 10.)
ax.set_zlim(-10., 10.)
plt.show()
答案 0 :(得分:2)
所谓的angle
只是y坐标的乘数。因此,对于小角度,结果是相同的,然而,对于90度旋转,因子必须是无穷大。
您可以使用tanget重新定义角度并以弧度为单位提供输入:
angle = np.tan(pi * 0.25)
现在,您将看到具有指定角度的实际旋转。
更清洁的修改可能是:
# Define inclined plane.
angle = pi * 0.5 # <-- This is the variable
X2, Y2 = np.meshgrid([-dim, dim], [0, dim])
Z2 = Y2 * np.tan(angle)
X3, Y3 = np.meshgrid([-dim, dim], [-dim, 0])
Z3 = Y3 * np.tan(angle)