nye*_*e17 21 python matplotlib
我想使用matplotlib或多或少地绘制我下面附着的图形,其中包括两个相交的平面,其中正确的透明度表示它们的相对方向,以及两个平面中的圆和矢量以2D投影.
我不确定是否有现成的包,这样做,任何提示?
tac*_*ell 20
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
dim = 10
X, Y = np.meshgrid([-dim, dim], [-dim, dim])
Z = np.zeros((2, 2))
angle = .5
X2, Y2 = np.meshgrid([-dim, dim], [0, dim])
Z2 = Y2 * angle
X3, Y3 = np.meshgrid([-dim, dim], [-dim, 0])
Z3 = Y3 * angle
r = 7
M = 1000
th = np.linspace(0, 2 * np.pi, M)
x, y, z = r * np.cos(th), r * np.sin(th), angle * r * np.sin(th)
ax.plot_surface(X2, Y3, Z3, color='blue', alpha=.5, linewidth=0, zorder=-1)
ax.plot(x[y < 0], y[y < 0], z[y < 0], lw=5, linestyle='--', color='green',
zorder=0)
ax.plot_surface(X, Y, Z, color='red', alpha=.5, linewidth=0, zorder=1)
ax.plot(r * np.sin(th), r * np.cos(th), np.zeros(M), lw=5, linestyle='--',
color='k', zorder=2)
ax.plot_surface(X2, Y2, Z2, color='blue', alpha=.5, linewidth=0, zorder=3)
ax.plot(x[y > 0], y[y > 0], z[y > 0], lw=5, linestyle='--', color='green',
zorder=4)
plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我正在运行一个非常接近当前主版本的版本,所以我不确定在旧版本中会有什么用
分割绘图的原因是"上方"和"下方"是以某种神秘的方式确定的(我并不完全确定它zorder实际上做了什么),并且实际上取决于艺术家的绘制顺序.因此曲面不能相交(每个曲面都会在另一个上方),因此您需要分别绘制交点两侧的剖面.(你可以在黑色线条中看到这一点,我在上面的蓝色平面上方看起来没有分开.
表面的"正确"排序似乎也取决于视角.
Matplotlib确实具有3d投影功能,但虚线在最终的2D图像视图中以恒定宽度绘制,看起来并不像在倾斜平面上平放.如果几何结构很简单,并且"轨道"圆形,它可能会起作用,但如果你想要绘制一个角度看到的椭圆,观众可能希望在整个3D排列上有更多的视觉线索.
如果我不得不制作一个漂亮的花哨插图,但更好,更漂亮,而且不必自动化,我首先要为每个平面创建图形 - 至少是虚线圆圈 - 一个简单的平面2D图像,使用目前看起来很方便的东西 - 像Illustrator或Inkscape这样的矢量绘图程序,或者如果有数据需要遵循matplotlib.
然后,我会使用POV-Ray的或搅拌机的飞机在任何角度,为圆球状的东西(行星?)型号.已生成的2D图形将成为要映射到平面的纹理.POV-Ray使用脚本语言,允许为将来的项目保留,修改和复制记录.如果它真的是一次性的,我不介意手工完成,Blender很好.无论使用哪种工具,结果都是显示3D几何元素投影到2D的图像.
圆形的东西,我称之为"行星"的东西在最后的作品中应该是扁平的圆圈,就像在例子中一样?然后我用渲染的3D图像上的矢量绘图应用程序绘制它们.但我怀疑你更喜欢3D中的球体.
显示的样本没有光照或阴影.阴影有助于澄清3D中的几何形状,尽管这两个插图中的第一个并不太糟糕.显示倾斜平面的行星在红线上的短绿线看起来很清楚,但阴影会有所帮助.对于形状,位置以及各种实体的交叉点,第二个插图看起来确实有点混乱.在这里,阴影会有所帮助.POV-Ray或Blender将很乐意创造这些.更多,被称为光能传递的相互反射有助于在2D图像中看到3D关系.这种高级效果现在很容易实现,不需要光学或图形方面的专业知识,只要知道它存在.
当然,除非已经熟悉了诸如POV-Ray之类的3D图形和工具,否则这个建议并不好.
对于自动化解决方案,在一些快速而肮脏的程序中使用OpenGL可能是最好的.但是,阴影可能需要一些工作.
| 归档时间: |
|
| 查看次数: |
8393 次 |
| 最近记录: |