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。
  • 图内不放标题,图题由本文件的二级/三级标题承担。
  • 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。
posted @ 2026-11-07 08:36  小青蛙电气  阅读(3)  评论(0)    收藏  举报