Форум сайта python.su
0
Вечер добрый. Столкнулся со следующей проблемой: на графике рисую сферу и плоскость. И, несмотря на то, что сфера выше по координатам, плоскость её накрывает!! Прогуглил всё, что мог, ничего кроме совмещения лимитов разных графиков не нашел, а это, соответственно совсем другая проблема. Помогите пожалуйста!!
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
N = 1
a1 = 0.5 + 1/N
b1 = 1.5 + 1/(N + 1)
r1 = 1 - 1/(N + 2)
a2 = 1.5 + 1/N
b2 = 0.5 + 1/(N + 1)
r2 = 0.5 + 1/(N + 2)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x2 = np.linspace(-1, 1, 100)
y2 = np.linspace(-1, 1, 100)
x2, y2 = np.meshgrid(x2, y2)
z2 = np.zeros(x2.shape)
ax.plot_surface(x2, y2, z2, rstride=4, cstride=4, cmap=cm.ocean) #плоскость
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
r=0.5
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = 0.5 + r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='r',) #сфера
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlim3d(-1,1)
plt.show()


Отредактировано (Окт. 2, 2011 21:40:52)
Офлайн
253
matplotlib 2D рисовалка - просто лепит проекции на экран, может поменяете порядок отрисовки?
Для сложных сцен используйте opengl, vpython и т. п.
Офлайн
0
в моём случае всё-таки не 2D-рисовалка, так как я, как минимум, могу крутить получившуюся 3D-модель! Я пробовал менять порядок прорисовки - не помогло (что меня сильно удивило). Самое интересное, что при определенном угле поворота, сфера таки оказывается сверху. Сей факт поверг меня в шок (на некоторое время). Однако, мне и нужен был всего-лишь скриншот, где всё правильно видно, так что вопрос, наверное, исчерпан. По поводу других инструментов - я весь прошлый курс моделировал в matlab, а сейчас решил всё делать на питоне. Гугл сказал, что matplotlib - то, что мне нужно. Я ему поверил)
Всем спасибо за внимание!
Отредактировано (Окт. 2, 2011 23:03:17)
Офлайн
253
Для 3D моделей посмотрите vpython - очень простое средство, с ним не будет указанной проблемы :).
В отличии от matlab - мир python открытая система, каждый делает для нее что может. Если вы поправите ошибки matplotlib, или просто сообщите о них разработчикам, все вам будут благодарны.
Офлайн
0
Мне и правда не пришло сразу в голову, что это может быть баг.
Офлайн