28 三维箭头 quiver3D
28 三维箭头 quiver3D
用途
三维矢量场方向,电场、磁场、电流密度的空间指向。
示例(5 张)
28-1 三维电场矢量分布

28-2 载流线圈的三维磁场矢量

28-3 母线室三维气流矢量

28-4 三维空间潮流方向矢量

28-5 接地网三维电流密度矢量

代码
以下 5 个函数取自 code/第四批_三维扩展261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第四批_三维扩展261107.py
def q3_01():
"""三维电场矢量分布。"""
fig, ax = new_fig3d(left=0.13)
g = np.linspace(-1, 1, 6)
X, Y, Z = np.meshgrid(g, g, g)
R = np.sqrt(X ** 2 + Y ** 2 + Z ** 2) + 0.15
Ex, Ey, Ez = X / R ** 3, Y / R ** 3, Z / R ** 3
ax.quiver3D(X, Y, Z, Ex, Ey, Ez, length=0.11, normalize=True,
color=C1, linewidth=0.6, arrow_length_ratio=0.35)
ax.set_xlabel("横向 " + IT["x"] + " / m", labelpad=2)
ax.set_ylabel("纵向 " + IT["y"] + " / m", labelpad=2)
ax.set_zlabel("高度 " + IT["z"] + " / m", labelpad=2)
ax.view_init(elev=24, azim=-126)
save(fig, "28_三维箭头", "28_三维箭头_三维电场矢量")
def q3_02():
"""载流线圈的三维磁场矢量。"""
fig, ax = new_fig3d(left=0.13)
g = np.linspace(-1, 1, 6)
X, Y, Z = np.meshgrid(g, g, g)
R2 = X ** 2 + Y ** 2 + 0.08
Bx = -Y / R2
By = X / R2
Bz = 0.55 * Z
ax.quiver3D(X, Y, Z, Bx, By, Bz, length=0.10, normalize=True,
color=C3, linewidth=0.6, arrow_length_ratio=0.35)
ax.set_xlabel("横向 " + IT["x"] + " / m", labelpad=2)
ax.set_ylabel("纵向 " + IT["y"] + " / m", labelpad=2)
ax.set_zlabel("高度 " + IT["z"] + " / m", labelpad=2)
ax.view_init(elev=26, azim=-124)
save(fig, "28_三维箭头", "28_三维箭头_三维磁场矢量")
def q3_03():
"""母线室三维气流矢量。"""
fig, ax = new_fig3d(left=0.13)
g = np.linspace(0, 1, 5)
X, Y, Z = np.meshgrid(g, g, g)
U = 1.0 + 0.3 * np.sin(Y * 3)
V = 0.25 * np.sin(X * 4)
W = -0.35 * (Z - 0.5)
ax.quiver3D(X, Y, Z, U, V, W, length=0.13, normalize=True,
color=C1, linewidth=0.6, arrow_length_ratio=0.35)
ax.set_xlabel("柜宽", labelpad=2)
ax.set_ylabel("柜深", labelpad=2)
ax.set_zlabel("柜高", labelpad=2)
ax.view_init(elev=22, azim=-122)
save(fig, "28_三维箭头", "28_三维箭头_母线室气流")
def q3_04():
"""三维空间潮流方向矢量。"""
fig, ax = new_fig3d(left=0.13)
pts = np.array([[0, 0, 0], [2, 1, 1], [2, -1, 2], [4, 0.6, 1.6], [4, -0.6, 2.6]])
edges = [(0, 1, 0.62), (0, 2, 0.48), (1, 3, 0.41), (2, 4, 0.33)]
for a, b, w in edges:
d = pts[b] - pts[a]
ax.quiver3D(*pts[a], *d, length=np.linalg.norm(d) * 0.88,
normalize=True, color=C1, linewidth=1.0,
arrow_length_ratio=0.28)
ax.scatter(pts[:, 0], pts[:, 1], pts[:, 2], s=22, color=C2, depthshade=False)
ax.set_xlabel("东向距离 " + IT["x"] + " / km", labelpad=2)
ax.set_ylabel("北向距离 " + IT["y"] + " / km", labelpad=2)
ax.set_zlabel("高度 " + IT["z"] + " / 100 m", labelpad=2)
ax.view_init(elev=24, azim=-128)
save(fig, "28_三维箭头", "28_三维箭头_三维潮流方向")
def q3_05():
"""接地网三维电流密度矢量。"""
fig, ax = new_fig3d(left=0.13)
g = np.linspace(-2, 2, 5)
X, Y, Z = np.meshgrid(g, g, np.array([0.2, 1.0, 2.2]))
R = np.sqrt(X ** 2 + Y ** 2 + (Z + 0.8) ** 2) + 0.4
Jx, Jy, Jz = X / R ** 2, Y / R ** 2, 0.35 / R ** 2
ax.quiver3D(X, Y, Z, Jx, Jy, Jz, length=0.18, normalize=True,
color=C3, linewidth=0.6, arrow_length_ratio=0.35)
ax.set_xlabel("东向距离 " + IT["x"] + " / m", labelpad=2)
ax.set_ylabel("北向距离 " + IT["y"] + " / m", labelpad=2)
ax.set_zlabel("深度 " + IT["z"] + " / m", labelpad=2)
ax.view_init(elev=22, azim=-126)
save(fig, "28_三维箭头", "28_三维箭头_三维电流密度")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号