三维填充图(`fill3`)

三维填充图(fill3)

04_三维与几何 5 张 MATLAB R2023b 100 mm 宽 @ 300 dpi

这个方法适合什么

三维空间中的多边形填充,可拼出包络面。适合:逆变器 PQ 容量包络、保护动作区、三维可行域边界。

电气场景

1 逆变器PQ容量包络

2 电池安全运行域

3 分区用电量三维柱

4 风电出力可行域

5 变压器负载能力包络

代码

脚本 p4_3d_geom.m 中对应 fill3 的一段,SEL 用于选择只跑某几个方法。

if any(SEL==9)
    % ---- 9.1 逆变器 PQ 容量包络 ----
    try
        Pb = [0 20 40 60 80 95 100 100 80 60 40 20 0];
        Qb = [62 60 54 44 30 14 0 -42 -42 -42 -42 -42 -42];
        sc = [0.72 0.86 1.00];
        zz = [96.4 97.3 98.0];
        cc = {C(5,:),C(1,:),C(2,:)};

        f  = ml_fig(PP,100,95);
        ax = ax3(f,false);
        hs = gobjects(1,3); hold(ax,'on');       % fill3 内部走 newplot,必须先 hold
        for k = 1:3
            hs(k) = fill3(Pb*sc(k),Qb*sc(k),zz(k)*ones(size(Pb)),cc{k}, ...
                          'FaceAlpha',0.34,'EdgeColor',cc{k},'LineWidth',0.8);
        end
        xlabel(ax,ml_tx('有功 <i>P</i> / kW'));
        ylabel(ml_tx('无功 <i>Q</i> / kvar'));
        zlabel(ax,ml_tx('效率 η / %'));
        xlim(ax,[-10 110]); ylim(ax,[-50 70]); zlim(ax,[95.6 98.6]);
        lg = legend(ax,hs,ml_tx({'96.4 % 包络','97.3 % 包络','98.0 % 包络'}),'Location','northeast');
        ml_style_legend(lg,PP);
        save_png(f,FIGD,'逆变器PQ容量包络');
    catch ME
        fprintf('[FAIL] 9-1 %s\n', ME.message); close all
    end

    % ---- 9.2 电池安全运行域 ----
    try
        Sb = [0 100 100 85 45 0];
        Tb = [0 0 38 46 50 50];
        sc = [0.80 0.90 1.00];
        zz = [1 2 3];
        cc = {C(6,:),C(3,:),C(2,:)};

        f  = ml_fig(PP,100,95);
        ax = ax3(f,false);
        hs = gobjects(1,3); hold(ax,'on');       % fill3 内部走 newplot,必须先 hold
        for k = 1:3
            hs(k) = fill3(Sb*sc(k),Tb*sc(k)+(1-sc(k))*6,zz(k)*ones(size(Sb)),cc{k}, ...
                          'FaceAlpha',0.32,'EdgeColor',cc{k},'LineWidth',0.8);
        end
        xlabel(ax,ml_tx('荷电状态 SOC / %'));
        ylabel(ml_tx('温度 <i>T</i> / °C'));
        zlabel(ax,ml_tx('充放电倍率 / C'));
        xlim(ax,[0 110]); ylim(ax,[0 56]); zlim(ax,[0.6 3.9]);
        lg = legend(ax,hs,ml_tx({'1C 允许域','2C 允许域','3C 允许域'}),'Location','northeast');
        ml_style_legend(lg,PP);
        save_png(f,FIGD,'电池安全运行域');
    catch ME
        fprintf('[FAIL] 9-2 %s\n', ME.message); close all
    end

    % ---- 9.3 分区用电量三维柱 ----
    try
        reg = 1:5;
        typ = {'居民','商业','工业'};
        val = [3.2 5.1 8.4; 4.6 6.8 9.2; 2.8 4.2 6.5; 5.4 7.1 10.6; 3.9 5.6 7.8];
        cc  = {C(1,:),C(3,:),C(2,:)};

        f  = ml_fig(PP,100,95);
        ax = ax3(f,false);
        hs = gobjects(1,3);
        for t = 1:3
            for k = 1:5
                cx = k + (t-2)*0.26;
                hs(t) = box3(ax,cx-0.11,cx+0.11,0.22,0.72,0,val(k,t),cc{t},0.90);
            end
        end
        set(ax,'XTick',1:5,'XTickLabel',ml_tx({'A 区','B 区','C 区','D 区','E 区'}));
        xlabel(ax,ml_tx('供电分区'));
        ylabel(ax,'');
        zlabel(ax,ml_tx('年用电量 / (GW·h)'));
        xlim(ax,[0.4 5.6]); ylim(ax,[0 0.95]); zlim(ax,[0 13.5]);
        set(ax,'YTick',[]);
        lg = legend(ax,hs,ml_tx(typ),'Location','northeast');
        ml_style_legend(lg,PP);
        save_png(f,FIGD,'分区用电量三维柱');
    catch ME
        fprintf('[FAIL] 9-3 %s\n', ME.message); close all
    end

    % ---- 9.4 风电出力可行域 ----
    try
        vb = [3.0 4.0 6.0 9.0 12.0 18.0 22.0 25.0 25.0 3.0];
        nb = [9.0 12.0 15.5 17.5 18.0 18.0 17.0 15.0 11.0 11.0];
        sc = [0.86 0.93 1.00];
        zz = [1.2 2.0 2.6];
        cc = {C(5,:),C(1,:),C(6,:)};

        f  = ml_fig(PP,100,95);
        ax = ax3(f,false);
        hs = gobjects(1,3); hold(ax,'on');       % fill3 内部走 newplot,必须先 hold
        for k = 1:3
            hs(k) = fill3(vb*sc(k),nb*sc(k),zz(k)*ones(size(vb)),cc{k}, ...
                          'FaceAlpha',0.34,'EdgeColor',cc{k},'LineWidth',0.8);
        end
        xlabel(ax,ml_tx('风速 <i>v</i> / (m/s)'));
        ylabel(ml_tx('转速 <i>n</i> / (r/min)'));
        zlabel(ax,ml_tx('有功出力 <i>P</i> / MW'));
        xlim(ax,[2 27]); ylim(ax,[8 20]); zlim(ax,[0.8 3.2]);
        lg = legend(ax,hs,ml_tx({'桨距角 0°','桨距角 10°','桨距角 20°'}),'Location','northeast');
        ml_style_legend(lg,PP);
        save_png(f,FIGD,'风电出力可行域');
    catch ME
        fprintf('[FAIL] 9-4 %s\n', ME.message); close all
    end

    % ---- 9.5 变压器负载能力包络 ----
    try
        Lb = [20 55 75 90 100 100 20 20];
        Hb = [0.5 0.5 0.8 2.2 5.5 9.0 9.0 0.5];
        sc = [1.00 0.92 0.84];
        zz = [20 30 40];
        cc = {C(6,:),C(3,:),C(2,:)};

        f  = ml_fig(PP,100,95);
        ax = ax3(f,false);
        hs = gobjects(1,3); hold(ax,'on');       % fill3 内部走 newplot,必须先 hold
        for k = 1:3
            hs(k) = fill3(Lb*sc(k),Hb*sc(k),zz(k)*ones(size(Lb)),cc{k}, ...
                          'FaceAlpha',0.32,'EdgeColor',cc{k},'LineWidth',0.8);
        end
        xlabel(ax,ml_tx('负载率 <i>β</i> / %'));
        ylabel(ml_tx('寿命损失率 / %'));
        zlabel(ax,ml_tx('环境温度 <i>T</i>_{a} / °C'));
        xlim(ax,[10 108]); ylim(ax,[0 10]); zlim(ax,[16 44]);
        lg = legend(ax,hs,ml_tx({'20 °C 包络','30 °C 包络','40 °C 包络'}),'Location','northeast');
        ml_style_legend(lg,PP);
        save_png(f,FIGD,'变压器负载能力包络');
    catch ME
        fprintf('[FAIL] 9-5 %s\n', ME.message); close all
    end
end
posted @ 2026-11-09 17:44  小青蛙电气  阅读(3)  评论(0)    收藏  举报