% =========================================================================
% SIATS 2.0 - Sistema Inteligente de Alerta Temprana de Tsunamis
% Archivo: principal.m - SECUENCIA DE ARRANQUE Y CARGA VISUAL
% =========================================================================
function principal()
clc; close all; warning('off', 'all');
% 1. Inicialización de Estructura de Datos Centralizada
datos = struct();
datos.ui.colores.fondo = [0.05, 0.08, 0.12];
datos.ui.colores.texto = [0.8, 0.9, 0.95];
datos.ui.colores.acento = [0.0, 0.8, 0.6];
datos.ui.colores.alerta = [0.9, 0.2, 0.2];
% Subsistemas inicializados
datos.terremoto = struct('Mw', 0, 'profundidad', 0, 'energia', 0, 'lat', 0, 'lon', 0);
datos.tsunami = struct('velocidad', 0, 'altura', 0, 'tiempoLlegada', 0, 'riesgo', 0);
datos.alerta = struct('nivel', 'VERDE', 'mensaje', 'SISTEMA EN ESPERA');
datos.sensores = struct('gps', true, 'boyas', true, 'satelites', true, 'sismografos', true);
% 2. DESPLIEGUE DE PANTALLA DE BIENVENIDA (Factor WOW)
% Crear figura de carga limpia, sin barras de menú ni herramientas
fig_carga = figure('Name', 'Iniciando SIATS 2.0', 'NumberTitle', 'off', ...
'Color', datos.ui.colores.fondo, 'MenuBar', 'none', ...
'ToolBar', 'none', 'Position', [400, 300, 700, 400]);
% Eje para la animación de la ola
ax = axes('Parent', fig_carga, 'Color', datos.ui.colores.fondo, ...
'XColor', 'none', 'YColor', 'none', 'Position', [0.1, 0.3, 0.8, 0.4]);
hold(ax, 'on');
% Elementos de texto en la interfaz gráfica
text(0.5, 2.5, 'SIATS 2.0 - CENTRO NACIONAL DE MONITOREO', 'Parent', ax, ...
'Color', datos.ui.colores.texto, 'FontSize', 16, 'FontWeight', 'bold', ...
'HorizontalAlignment', 'center');
txt_log = text(0.5, -2.5, 'Inicializando subsistemas...', 'Parent', ax, ...
'Color', datos.ui.colores.acento, 'FontSize', 11, ...
'HorizontalAlignment', 'center');
% Imprimir log en consola simultáneamente
fprintf('====================================================\n');
fprintf(' SIATS 2.0 - CENTRO NACIONAL DE MONITOREO\n');
fprintf('====================================================\n');
% Tiempos de carga ajustados para que sea fluido
secuencias = {
'Cargando protocolos de seguridad y validación...', 0.6;
'Estableciendo enlace con red sísmica de República Dominicana...', 0.8;
'Calibrando boyas DART de alta mar...', 0.6;
'Renderizando perfiles batimétricos y topografía costera...', 0.8;
'Activando algoritmos de predicción geofísica...', 0.6;
'SISTEMA LISTO PARA OPERACIONES.' , 0.5
};
% Configuración inicial de la ola matemática
x = linspace(0, 6*pi, 300);
h_ola = plot(ax, x, sin(x), 'Color', datos.ui.colores.acento, 'LineWidth', 2.5);
axis(ax, [0, 6*pi, -3, 3]);
% Bucle de carga interactiva (Consola + Gráfico)
fase = 0; % Variable para desplazar la ola
for i = 1:size(secuencias, 1)
mensaje = secuencias{i,1};
tiempo_pausa = secuencias{i,2};
% Actualizar logs
fprintf('>> %s\n', mensaje);
if ishandle(txt_log)
set(txt_log, 'String', sprintf('>> %s', mensaje));
end
% Animación fluida de la ola calculada en tiempo real
pasos = round(tiempo_pausa / 0.05);
for j = 1:pasos
fase = fase + 0.15; % Velocidad de desplazamiento
amplitud = 0.2 + (i * 0.3); % La ola crece conforme avanza la carga
% Ecuación de la ola con un ligero ruido para realismo oceánico
y = amplitud * sin(x - fase) + 0.05 * randn(1, length(x));
% Actualizar solo los datos de Y (Método protegido)
if ishandle(h_ola)
set(h_ola, 'YData', y);
drawnow;
end
pause(0.05);
end
end
% Cerrar pantalla de carga elegantemente
pause(0.5);
if ishandle(fig_carga)
close(fig_carga);
end
% 3. INICIALIZAR EL DASHBOARD PRINCIPAL
try
fprintf('\n[ÉXITO] Lanzando Interfaz Principal...\n');
interfaz(datos); % <--- LÍNEA ACTIVADA PARA ABRIR EL DASHBOARD
catch ME
fprintf('\n[ERROR CRÍTICO] Fallo en el despliegue del Dashboard:\n%s\n', ME.message);
fprintf('Asegúrate de que el archivo "interfaz.m" esté en esta misma carpeta y sin errores.\n');
end
end
To embed this project on your website, copy the following code and paste it into your website's HTML: