This commit is contained in:
Horldsence
2026-09-13 10:27:09 +08:00
parent b810ec7777
commit 82311a47cc
52 changed files with 2563 additions and 1278 deletions
+55
View File
@@ -0,0 +1,55 @@
function fig_geo_q2_safe_disk()
%FIG_GEO_Q2_SAFE_DISK 问题二:截断角域外接圆与保证接收的安全候选盘。
S = fig_style();
D = load_data(S, 'geo_q2');
H = geom_helpers();
fig = figure('Color', 'w', 'Visible', 'off');
t = tiledlayout(fig, 1, 2, 'TileSpacing', 'compact', 'Padding', 'compact');
% 左:真实几何(Ω 内的角域与两个候选圆)
ax1 = nexttile(t);
hold(ax1, 'on');
H.circle(ax1, [0 0], D.omega_r, pick_color(S, 'primary'), 1.2, '-');
hw = H.wedge(ax1, D.wedge, pick_color(S, 'accent'), 0.25);
hd = H.circle(ax1, D.c, D.a, pick_color(S, 'violet'), 1.2, '--');
hs = H.disk(ax1, D.c, D.safe, pick_color(S, 'success'), 0.30, '-');
H.marker(ax1, [0 0], pick_color(S, 'accent'), 6, true);
H.marker(ax1, D.c, pick_color(S, 'violet'), 5, true);
H.label_points(ax1, [0 0], {'s1'}, pick_color(S, 'accent'));
H.label_points(ax1, D.c, {'c'}, pick_color(S, 'violet'));
hold(ax1, 'off');
axis(ax1, 'equal');
xlim(ax1, [-D.half, D.half]);
ylim(ax1, [-D.half, D.half]);
xlabel(ax1, 'x / m');
ylabel(ax1, 'y / m');
legend(ax1, [hw, hd, hs], D.legend, 'Location', 'southoutside', ...
'Orientation', 'horizontal');
% 右:半径分解 a + (1000 − a) = 1000 m
ax2 = nexttile(t);
hold(ax2, 'on');
H.circle(ax2, [0 0], D.a, pick_color(S, 'violet'), 1.2, '--');
H.disk(ax2, [0 0], D.safe, pick_color(S, 'success'), 0.30, '-');
H.marker(ax2, [0 0], 'k', 5, true);
ang = deg2rad(35);
p_out = D.a * [cos(ang), sin(ang)];
p_in = D.safe * [cos(-ang), sin(-ang)];
H.arrow(ax2, [0 0], p_out, pick_color(S, 'violet'));
H.arrow(ax2, [0 0], p_in, pick_color(S, 'success'));
text(ax2, p_out(1) * 1.06, p_out(2) * 1.12, sprintf('a = %.1f m', D.a), ...
'Color', pick_color(S, 'violet'), 'Interpreter', 'none');
text(ax2, p_in(1) * 1.04, p_in(2) * 1.30, sprintf('1000 − a = %.1f m', D.safe), ...
'Color', pick_color(S, 'success'), 'HorizontalAlignment', 'right', ...
'Interpreter', 'none');
text(ax2, -D.safe * 0.45, 0, 'c', 'Color', 'k', ...
'HorizontalAlignment', 'right', 'VerticalAlignment', 'middle');
hold(ax2, 'off');
axis(ax2, 'equal');
xlim(ax2, [-D.a * 1.15, D.a * 1.75]);
ylim(ax2, [-D.a * 1.05, D.a * 1.05]);
axis(ax2, 'off');
fig_save(fig, S, 'geo-q2-guaranteed-reception-disk.png');
end