23 三角曲面 plot_trisurf
23 三角曲面 plot_trisurf
用途
散点数据拟合出曲面,不必先插值到规则网格。
示例(5 张)
23-1 散点温度场的三角曲面拟合

23-2 地形起伏的三角曲面

23-3 测点电位的三角曲面

23-4 电机实测工况点的效率三角曲面

23-5 风功率密度的三角曲面

代码
以下 5 个函数取自 code/第四批_三维扩展261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第四批_三维扩展261107.py
def ts_01():
"""散点温度场的三角曲面拟合。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2301)
x = rng.uniform(0, 1, 120)
y = rng.uniform(0, 1, 120)
z = 30 + 26 * np.exp(-((x - 0.45) ** 2 + (y - 0.5) ** 2) / 0.09) + 6 * y
s = ax.plot_trisurf(x, y, z, cmap=CMAP_SEQ, linewidth=0.15, edgecolor="0.55",
antialiased=True)
ax.set_xlabel("横向坐标 " + IT["x"] + " / m", labelpad=2)
ax.set_ylabel("纵向坐标 " + IT["y"] + " / m", labelpad=2)
ax.set_zlabel("温度 " + IT["T"] + " / °C", labelpad=2)
ax.view_init(elev=26, azim=-126)
_k3(fig, ax, s, "温度 " + IT["T"] + " / °C")
save(fig, "23_三角曲面", "23_三角曲面_散点温度场")
def ts_02():
"""地形起伏的三角曲面。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2302)
x = rng.uniform(0, 6, 160)
y = rng.uniform(0, 4, 160)
z = 120 + 60 * np.exp(-((x - 2.4) ** 2 + (y - 2.0) ** 2) / 1.6) \
+ 25 * np.sin(x / 1.3) + 18 * np.cos(y / 1.1)
s = ax.plot_trisurf(x, y, z, cmap=CMAP_SEQ, linewidth=0.12, edgecolor="0.6",
antialiased=True)
ax.set_xlabel("东向距离 " + IT["x"] + " / km", labelpad=2)
ax.set_ylabel("北向距离 " + IT["y"] + " / km", labelpad=2)
ax.set_zlabel("海拔 " + IT["z"] + " / m", labelpad=2)
ax.view_init(elev=30, azim=-124)
_k3(fig, ax, s, "海拔 " + IT["z"] + " / m")
save(fig, "23_三角曲面", "23_三角曲面_地形起伏")
def ts_03():
"""测点电位的三角曲面。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2303)
x = rng.uniform(0, 1, 130)
y = rng.uniform(0, 1, 130)
z = np.zeros_like(x)
for gx, gy, k in [(0.3, 0.35, 1.0), (0.72, 0.6, 0.85)]:
z += k / np.sqrt((x - gx) ** 2 + (y - gy) ** 2 + 0.012) * 1.1
s = ax.plot_trisurf(x, y, z, cmap=CMAP_SEQ, linewidth=0.12, edgecolor="0.6",
antialiased=True)
ax.set_xlabel("东向距离 " + IT["x"] + " / m", labelpad=2)
ax.set_ylabel("北向距离 " + IT["y"] + " / m", labelpad=2)
ax.set_zlabel("电位 " + IT["U"] + " / V", labelpad=2)
ax.view_init(elev=27, azim=-128)
ax.set_zlim(0, 60)
_k3(fig, ax, s, "电位 " + IT["U"] + " / V")
save(fig, "23_三角曲面", "23_三角曲面_测点电位分布")
def ts_04():
"""电机实测工况点的效率三角曲面。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2304)
n = rng.uniform(700, 2900, 140)
tq = rng.uniform(5, 115, 140)
z = 94.5 - 8.0 * ((tq - 62) / 90) ** 2 - 3.4 * ((n - 2100) / 1500) ** 2 \
+ rng.normal(0, 0.35, 140)
s = ax.plot_trisurf(n, tq, z, cmap=CMAP_SEQ, linewidth=0.12, edgecolor="0.6",
antialiased=True)
ax.set_xlabel("转速 " + IT["n"] + " / (r/min)", labelpad=2)
ax.set_ylabel("转矩 " + IT["T"] + " / (N·m)", labelpad=2)
ax.set_zlabel("效率 " + IT["eta"] + " / %", labelpad=2)
ax.view_init(elev=25, azim=-130)
_k3(fig, ax, s, "效率 " + IT["eta"] + " / %")
save(fig, "23_三角曲面", "23_三角曲面_电机工况点效率")
def ts_05():
"""风功率密度的三角曲面。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2305)
x = rng.uniform(0, 6, 150)
y = rng.uniform(0, 4, 150)
z = 320 + 180 * np.exp(-((x - 2.0) ** 2 + (y - 2.4) ** 2) / 2.0) \
+ 140 * np.exp(-((x - 4.6) ** 2 + (y - 1.3) ** 2) / 1.6)
s = ax.plot_trisurf(x, y, z, cmap=CMAP_SEQ, linewidth=0.12, edgecolor="0.6",
antialiased=True)
ax.set_xlabel("东向距离 " + IT["x"] + " / km", labelpad=2)
ax.set_ylabel("北向距离 " + IT["y"] + " / km", labelpad=2)
ax.set_zlabel("风功率密度 / (W/m²)", labelpad=2)
ax.view_init(elev=27, azim=-125)
_k3(fig, ax, s, "风功率密度 / (W/m²)")
save(fig, "23_三角曲面", "23_三角曲面_风功率密度")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号