%% Fonction pour générer les graphiques avec positions de fissures
function genererGraphiques(x, M, V, y, sigma, tau, L, ...
h, b, E, sigma_adm, tau_adm, seuil_pourcent, ...
zones_fissures_flexion, zones_fissures_cisaillement)
% Création d'une figure BEAUCOUP PLUS GRANDE dédiée à la
visualisation
figure('Name', 'Visualisation Agrandie - Poutre avec Fissures', ...
'Position', [100 50 1400 900]); % Fenêtre plus large et plus haute
% Positions uniques des fissures
positions_fissures_flexion = unique(round(x(zones_fissures_flexion), 2));
positions_fissures_cisaillement =
unique(round(x(zones_fissures_cisaillement), 2));
% PARAMÈTRES D'ÉCHELLE TRÈS AGRANDIS
hauteur_poutre_visuelle = 1.0; % Poutre 2.5x plus haute visuellement
marge_verticale = 0.8; % Grande marge pour les légendes
marge_horizontale = L * 0.8; % Très grandes marges horizontales
% Dessin de la poutre (TRÈS GRANDE)
y_poutre = [-hauteur_poutre_visuelle/2, -hauteur_poutre_visuelle/2, ...
hauteur_poutre_visuelle/2, hauteur_poutre_visuelle/2, -
hauteur_poutre_visuelle/2];
x_poutre = [0, L, L, 0, 0];
fill(x_poutre, y_poutre, [0.9 0.9 0.8], 'FaceAlpha', 0.8, 'EdgeColor', 'k',
'LineWidth', 4);
hold on;
% Appuis (plus grands)
hauteur_appui = hauteur_poutre_visuelle * 0.6;
plot([0 0], [-hauteur_poutre_visuelle/2 - hauteur_appui, -
hauteur_poutre_visuelle/2], ...
'k-', 'LineWidth', 6);
plot([L L], [-hauteur_poutre_visuelle/2 - hauteur_appui, -
hauteur_poutre_visuelle/2], ...
'k-', 'LineWidth', 6);
% Marquage des positions de fissures probables (BEAUCOUP PLUS
VISIBLES)
% Fissures de flexion (rouge) - TRÈS VISIBLES
for i = 1:length(positions_fissures_flexion)
x_fissure = positions_fissures_flexion(i);
% Ligne de fissure principale (épaisse et colorée)
plot([x_fissure x_fissure], [-hauteur_poutre_visuelle/3
hauteur_poutre_visuelle/3], ...
'r-', 'LineWidth', 6, 'Color', [1 0 0]);
% Marqueur supérieur
plot(x_fissure, hauteur_poutre_visuelle/2 + 0.15, 'ro', ...
'MarkerSize', 12, 'MarkerFaceColor', 'r', 'LineWidth', 2);
end
% Fissures de cisaillement (bleu) - TRÈS VISIBLES
for i = 1:length(positions_fissures_cisaillement)
x_fissure = positions_fissures_cisaillement(i);
if ~ismember(x_fissure, positions_fissures_flexion)
% Ligne de fissure en pointillés épais
plot([x_fissure x_fissure], [-hauteur_poutre_visuelle/4
hauteur_poutre_visuelle/4], ...
'b--', 'LineWidth', 4, 'Color', [0 0 1]);
% Marqueur inférieur
plot(x_fissure, -hauteur_poutre_visuelle/2 - 0.15, 'bs', ...
'MarkerSize', 12, 'MarkerFaceColor', 'b', 'LineWidth', 2);
end
end
% Ajout des charges pour contexte
% Charge répartie
q = [Link];
if q > 0
for x_charge = linspace(0, L, 10)
plot([x_charge x_charge], [hauteur_poutre_visuelle/2 + 0.05,
hauteur_poutre_visuelle/2 + 0.15], ...
'g-', 'LineWidth', 1);
end
text(L/2, hauteur_poutre_visuelle/2 + 0.25, sprintf('q = %.0f N/m',
q), ...
'HorizontalAlignment', 'center', 'FontWeight', 'bold', 'Color',
'green');
end
% Charge ponctuelle
P = [Link];
a = [Link];
if P > 0
plot([a a], [hauteur_poutre_visuelle/2 + 0.05,
hauteur_poutre_visuelle/2 + 0.25], ...
'm-', 'LineWidth', 3, 'Color', 'magenta');
plot(a, hauteur_poutre_visuelle/2 + 0.3, 'mv', ...
'MarkerSize', 10, 'MarkerFaceColor', 'magenta');
text(a, hauteur_poutre_visuelle/2 + 0.4, sprintf('P = %.0f N', P), ...
'HorizontalAlignment', 'center', 'FontWeight', 'bold', 'Color',
'magenta');
end
% Mise en forme AVEC TRÈS GRANDE ZONE D'AFFICHAGE
xlabel('Position [m]', 'FontSize', 12, 'FontWeight', 'bold');
ylabel('', 'FontSize', 12);
title('VISUALISATION AGRANDIE - POUTRE AVEC POSITIONS DES
FISSURES', ...
'FontSize', 14, 'FontWeight', 'bold', 'Color', 'blue');
% LIMITES TRÈS LARGES POUR UNE BONNE VISIBILITÉ
xlim([-marge_horizontale L + marge_horizontale]);
ylim([-hauteur_poutre_visuelle/2 - marge_verticale,
hauteur_poutre_visuelle/2 + marge_verticale]);
grid on;
grid minor;
% Légende détaillée
legend_items = {};
legend_items{end+1} = 'Poutre';
legend_items{end+1} = 'Appuis';
if ~isempty(positions_fissures_flexion)
legend_items{end+1} = 'Fissures FLEXION';
legend_items{end+1} = 'Zones flexion critiques';
end
if ~isempty(positions_fissures_cisaillement)
legend_items{end+1} = 'Fissures CISAILLEMENT';
legend_items{end+1} = 'Zones cisaillement critiques';
end
if q > 0
legend_items{end+1} = 'Charge répartie q';
end
if P > 0
legend_items{end+1} = 'Charge ponctuelle P';
end
legend(legend_items, 'Location', 'northeastoutside', 'FontSize', 10);
% Affichage des informations techniques
info_text = {sprintf('Longueur poutre: %.1f m', L), ...
sprintf('Section: %.1f x %.1f cm', b*100, h*100), ...
sprintf('Seuil détection: %d%%', seuil_pourcent)};
text(-marge_horizontale + 1, hauteur_poutre_visuelle/2 + 0.5,
info_text, ...
'FontSize', 10, 'BackgroundColor', 'white', 'EdgeColor', 'black');
% Affichage console des positions exactes
fprintf('\n=== POSITIONS PROBABLES DE FISSURES ===\n');
if ~isempty(positions_fissures_flexion)
fprintf('🔴 Fissures FLEXION à x = ');
fprintf('%.2f m ', positions_fissures_flexion);
fprintf('\n');
end
if ~isempty(positions_fissures_cisaillement)
fprintf('🔵 Fissures CISAILLEMENT à x = ');
fprintf('%.2f m ', positions_fissures_cisaillement);
fprintf('\n');
end
if isempty(positions_fissures_flexion) &&
isempty(positions_fissures_cisaillement)
fprintf('✅ Aucune position critique identifiée\n');
end
% Création des graphiques techniques séparés
figure('Name', 'Résultats Techniques - Diagrammes', ...
'Position', [200 100 1200 600]);
% Moment fléchissant
subplot(2,3,1);
plot(x, M/1000, 'b-', 'LineWidth', 2);
xlabel('Position [m]'); ylabel('Moment [kN.m]');
title('Moment Fléchissant'); grid on;
% Effort tranchant
subplot(2,3,2);
plot(x, V/1000, 'r-', 'LineWidth', 2);
xlabel('Position [m]'); ylabel('Effort tranchant [kN]');
title('Effort Tranchant'); grid on;
% Flèche
subplot(2,3,3);
plot(x, y*1000, 'g-', 'LineWidth', 2);
xlabel('Position [m]'); ylabel('Flèche [mm]');
title('Déformée de la Poutre'); grid on;
% Contraintes normales
subplot(2,3,4);
plot(x, sigma/1e6, 'm-', 'LineWidth', 2);
hold on;
plot([0 L], [sigma_adm/1e6 sigma_adm/1e6], 'r--', 'LineWidth', 1.5,
'DisplayName', 'Limite admissible');
xlabel('Position [m]'); ylabel('Contrainte normale [MPa]');
title('Contraintes Normales (σ)');
legend('Contrainte', 'Limite');
grid on;
% Contraintes de cisaillement
subplot(2,3,5);
plot(x, tau/1e6, 'c-', 'LineWidth', 2);
hold on;
plot([0 L], [tau_adm/1e6 tau_adm/1e6], 'r--', 'LineWidth', 1.5,
'DisplayName', 'Limite admissible');
xlabel('Position [m]'); ylabel('Contrainte cisaillement [MPa]');
title('Contraintes de Cisaillement (τ)');
legend('Contrainte', 'Limite');
grid on;
% Graphique vide pour équilibrer la disposition
subplot(2,3,6);
text(0.5, 0.5, 'Voir figure séparée pour la visualisation détaillée des
fissures', ...
'HorizontalAlignment', 'center', 'FontSize', 12, 'FontWeight', 'bold');
axis off;
end