三维填充图(`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

浙公网安备 33010602011771号