如何绘制相交平面?
- 2025-03-05 09:17:00
- admin 原创
- 4
问题描述:
我想使用 matplotlib 来绘制或多或少如下所示的图形,其中包括两个相交的平面,并具有适当的透明度以指示它们的相对方向,以及在二维中投影的两个平面中的圆和矢量。
我不确定是否有现有的包可以执行此操作,有什么提示吗?
解决方案 1:
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()
注意事项:
我正在运行一个与当前主版本非常接近的版本,所以我不确定旧版本中哪些功能可以正常工作
分割绘图的原因在于“上方”和“下方”是以某种神秘的方式确定的(我并不完全确定它
zorder
是否真的有作用),并且实际上取决于艺术家绘制的顺序。因此,表面不能相交(一个表面在任何地方都在另一个表面之上),所以您需要分别绘制交叉点两侧的部分。(您可以在黑线中看到这一点,我没有分割它,它看起来像是在蓝色平面的“上方”)。表面的“正确”排序似乎也取决于视角。
解决方案 2:
Matplotlib 确实具有 3D 投影功能,但虚线在最终的 2D 图像视图中以恒定宽度绘制,看起来不像平放在倾斜的平面上。如果几何形状简单,并且“轨道”为圆形,则可能会有效,但如果您想绘制以一定角度看到的椭圆,则查看者可能需要有关整个 3D 排列的更多视觉线索。
如果我必须制作一幅像这样的漂亮而精美的插图,甚至更漂亮和更精美,并且它不必自动化,我会首先为每个平面创建图形 - 至少是虚线圆 - 作为一个简单的平面 2D 图像,使用任何目前看起来方便的东西 - 像 Illustrator 或 Inkscape 这样的矢量绘图程序,或者在 matplotlib 中,如果有要跟踪的数据。
然后,我会使用 POV-Ray 或 Blender 以任意角度对平面进行建模,对圆形物体(行星?)进行球体建模。已经生成的 2D 图形将成为要映射到平面的纹理。POV-Ray 使用脚本语言,允许保存、修改和复制记录以用于未来的项目。如果真的是一次性的,而且我不介意手动完成所有操作,Blender 就很不错。无论我使用哪种工具,结果都是一张显示 3D 几何元素在 2D 中的所需投影的图像。
这些圆形物体,也就是我所说的“行星”,在最终作品中应该是扁平的圆形,就像例子中的那样吗?然后我会用矢量绘图应用程序在渲染的 3D 图像上绘制它们。但我想你更喜欢 3D 中的球体。
所展示的样本没有光照或阴影。阴影有助于在 3D 中清晰显示几何图形,尽管这两个图中的第一个还不错。红线上显示倾斜平面行星的短绿线似乎足够清晰,但阴影会有所帮助。第二个插图在形状、位置和各个实体的交叉点方面看起来确实有点令人困惑。在这里,阴影会更有帮助。POV-Ray 或 Blender 可以轻松创建这些。此外,相互反射(称为辐射度)有助于在 2D 图像中看到 3D 关系。这种高级效果现在很容易实现,不需要光学或图形方面的专业知识,只要知道它存在即可。
当然,除非人们已经熟悉 3D 图形和 POV-Ray 等工具,否则这个建议就没什么用。
对于自动化解决方案,最好在一些快速而粗糙的程序中使用 OpenGL。不过阴影可能需要一些工作。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)