【问题标题】:Angle between intersecting planes drawn with matplotlib用 matplotlib 绘制的相交平面之间的角度
【发布时间】:2016-01-14 19:43:34
【问题描述】:

我需要生成一个具有相交平面的图,类似于问题中提出的图: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()

【问题讨论】:

    标签: python matplotlib 3d plane


    【解决方案1】:

    所谓的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)
    

    【讨论】:

    • 感谢 Schorsch。一个问题:上面你说我可以使用angle=np.tan(np.pi*0.5),但下面你说angle=np.pi*0.5。这些是不同的方程,是哪一个?
    • @Gabriel 如果您只想更改angle 行,请使用我先写的内容​​。但是,严格来说,这条线使用角度上的切线。因此,从变量命名和混淆方法来看,第二位仅以弧度指定 angle。但是你需要将切线作为Z2Z3 的函数。都只是个人喜好
    • 哦,对不起 Schorsch,我错过了您对 Z2Z3 所做的修改,这让我感到困惑。再次感谢!
    猜你喜欢
    • 2021-11-03
    • 2013-01-27
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多