2016-01-14 4 views
0

Мне нужно создать график с пересекающимися плоскостями, аналогичный представленному в вопрос: How to draw intersecting planes?. Принятый ответ в этом вопросе - отличный фрагмент кода tcaswell (код ниже).Угол между пересекающимися плоскостями, нарисованный с помощью matplotlib

В этом коде используется var angle, который, по-видимому, контролирует угол между каждой плоскостью. Для небольших значений он, конечно, ведет себя так, но для больших значений это не так.

Например, это результаты для значений angle = 0.25, 0.5, 1, 5, 50, 100.

enter image description here

Переменные, очевидно, имеет эффект по сравнению с углом между плоскостями, но он также контролирует расширение наклонной плоскости. Сначала я, хотя 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() 

ответ

2

Что называется angle только множитель для координаты у. Поэтому для маленьких углов результат тот же, однако для поворота на 90 градусов фактор должен быть бесконечным.

Вы можете переопределить угол с помощью tanget и обеспечения ввода в радианах:

angle = np.tan(pi * 0.25) 

Теперь вы будете видеть действительное вращение с заданным углом.

pi*0.25pi*1/3


уборщик модификация может быть:

# 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) 
+0

Благодаря Schorsch. Вопрос: выше вы говорите, что я мог бы использовать 'angle = np.tan (np.pi * 0.5)', но ниже вы говорите 'angle = np.pi * 0.5'. Это разные уравнения, какой из них? – Gabriel

+1

@Gabriel Если вы хотите изменить строку 'angle', используйте то, что я написал в первую очередь. Однако, строго говоря, прямая использует касательную на угол. Таким образом, из подхода с именованием переменных и путаницы второй бит просто указывает «угол» в радианах. Но тогда вам нужна касательная как функция для 'Z2' и' Z3'. Все просто личные предпочтения – Schorsch

+0

О, извините, Шорш, я пропустил модификацию, сделанную вами на 'Z2' и' Z3', вот что меня смутило. Еще раз спасибо! – Gabriel

Смежные вопросы