Мне нужно создать график с пересекающимися плоскостями, аналогичный представленному в вопрос: How to draw intersecting planes?. Принятый ответ в этом вопросе - отличный фрагмент кода tcaswell (код ниже).Угол между пересекающимися плоскостями, нарисованный с помощью matplotlib
В этом коде используется 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()
Благодаря Schorsch. Вопрос: выше вы говорите, что я мог бы использовать 'angle = np.tan (np.pi * 0.5)', но ниже вы говорите 'angle = np.pi * 0.5'. Это разные уравнения, какой из них? – Gabriel
@Gabriel Если вы хотите изменить строку 'angle', используйте то, что я написал в первую очередь. Однако, строго говоря, прямая использует касательную на угол. Таким образом, из подхода с именованием переменных и путаницы второй бит просто указывает «угол» в радианах. Но тогда вам нужна касательная как функция для 'Z2' и' Z3'. Все просто личные предпочтения – Schorsch
О, извините, Шорш, я пропустил модификацию, сделанную вами на 'Z2' и' Z3', вот что меня смутило. Еще раз спасибо! – Gabriel