Universidad Autónoma
Chapingo Mecatrónica Agrícola
Métodos
numéricos
TEMA: ESTRUCTURAS
Integrantes
Aguilar Martínez Rubén
Cortes Legaspi Efraín
Dimas Beltrán José Antonio
Ramos López Juan Carlos
Solís Pineda Gabriela Yamileth
Grado y grupo: 4° “5”
Nombre del profesor: Esteban Pioquinto
5 de febrero de 2026.
Bow barrel truss
function [V, B] = truss_bowbarrel(n, L, h_bottom, h_top)
% Bow Barrel Truss
% n = numero de paneles (REQUIERE n PAR)
% L = longitud total
% h_bottom = altura maxima del arco inferior
% h_top = altura adicional del arco superior
% Devuelve:
% V = matriz de vertices
% B = matriz de barras (conectividad)
if mod(n,2) ~= 0
error('n debe ser PAR para una Bow Barrel.');
end
dx = L / n;
% 1. NODOS
V = [];
% 1.1 Arco inferior
for i = 0:n
x = i*dx;
yb = h_bottom * ( 1 - ( (2*x/L - 1)^2 ) );
V = [V; x, yb];
end
% nodos 1 .. n+1
offset = n + 1;
% 1.2 Arco superior
for i = 0:n
x = i*dx;
yt = (h_bottom + h_top) * ( 1 - ( (2*x/L - 1)^2 ) );
V = [V; x, yt];
end
% nodos offset+1 .. offset+n+1
% 2. BARRAS
B = [];
% 2.1 Cuerda inferior
for i = 1:n
B = [B; i, i+1];
end
% 2.2 Cuerda superior
for i = 1:n
B = [B; offset+i, offset+i+1];
end
% 2.3 Verticales
for i = 1:n+1
B = [B; i, offset+i];
end
% 2.4 Diagonales tipo Bow Barrel
mid = n/2;
% IZQUIERDA: diagonales ↗
for i = 1:mid
B = [B; i, offset+i+1];
end
% DERECHA: diagonales ↖
for i = mid+1:n
B = [B; i+1, offset+i];
end
% 3. Mostrar matrices
disp('=====================');
disp('Matriz de Vertices V');
disp('=====================');
disp(V);
disp('=====================');
disp('Matriz de Barras B');
disp('=====================');
disp(B);
% 4. GRAFICAR
figure; hold on; grid on;
for k = 1:size(B,1)
p1 = V(B(k,1),:);
p2 = V(B(k,2),:);
plot([p1(1) p2(1)], [p1(2) p2(2)], 'k', 'LineWidth', 2);
end
plot(V(:,1), V(:,2), 'ro', 'MarkerFaceColor','r');
axis equal;
xlabel('x'); ylabel('y');
title('Bow Barrel Truss');
end
Arco y cuerda
function [V, B] = truss_arco_cuerda(L, H)
% L = longitud total
% H = altura máxima del arco
% -------------------------------
% 1. NODOS
% -------------------------------
n_paneles = 8; % Número de paneles para suavidad del arco
dx = L/n_paneles;
% Cuerda inferior (recta)
nodos_inf = n_paneles + 1;
V_inf = zeros(nodos_inf, 2);
for i = 1:nodos_inf
V_inf(i, 1) = (i-1) * dx;
V_inf(i, 2) = 0;
end
% Arco superior (forma parabólica)
nodos_sup = n_paneles + 1;
V_sup = zeros(nodos_sup, 2);
for i = 1:nodos_sup
x = (i-1) * dx;
% Ecuación parabólica para el arco
V_sup(i, 1) = x;
V_sup(i, 2) = 4*H * (x/L) * (1 - x/L) + 0.1*H; % Parábola + pequeño
offset
end
% Combinar nodos
V = [V_inf; V_sup];
% -------------------------------
% 2. BARRAS
% -------------------------------
B = [];
% Barras del arco superior
for i = 1:nodos_sup-1
B = [B; nodos_inf + i, nodos_inf + i + 1];
end
% Barras de la cuerda inferior
for i = 1:nodos_inf-1
B = [B; i, i + 1];
end
% Montantes verticales (conectan arco con cuerda)
for i = 1:min(nodos_inf, nodos_sup)
B = [B; i, nodos_inf + i];
end
% Diagonales para rigidizar (patrón tipo Howe)
for i = 1:nodos_inf-1
if mod(i, 2) == 1 % Diagonales alternadas
B = [B; i, nodos_inf + i + 1];
else
B = [B; i + 1, nodos_inf + i];
end
end
% 3. GRAFICAR
figure;
hold on;
grid on;
axis equal;
% Dibujar barras
for k = 1:size(B,1)
p1 = V(B(k,1), :);
p2 = V(B(k,2), :);
plot([p1(1), p2(1)], [p1(2), p2(2)], 'k', 'LineWidth', 2);
end
% Dibujar nodos
plot(V(:,1), V(:,2), 'ro', 'MarkerFaceColor', 'r', 'MarkerSize', 5);
% Configuración del gráfico
xlim([-dx, L+dx]);
ylim([-0.5, H*1.2]);
xlabel('x [m]');
ylabel('y [m]');
title('Armadura de Arco y Cuerda');
% Mostrar información
fprintf('Armadura de Arco y Cuerda creada:\n');
fprintf('- Longitud: %.1f m\n', L);
fprintf('- Altura máxima: %.1f m\n', H);
fprintf('- Nodos: %d\n', size(V,1));
fprintf('- Barras: %d\n', size(B,1));
end
Warren truss
function [V, B] = truss_warren(n, L, h)
% ---------------------------------------------------------------------
% Warren Truss (Recta) - Genera la geometria de una armadura Warren
% con nodos solo en los vertices de los triangulos (celosia).
% n = numero de paneles / triangulos (DEBE ser par).
% L = longitud total de la armadura.
% h = altura (peralte) de la armadura.
% Devuelve:
% V = matriz de vertices [x, y] (coordenadas de los nodos).
% B = matriz de barras [Nodo_inicio, Nodo_fin] (conectividad).
% ---------------------------------------------------------------------
% Verificación de Parámetros
if mod(n, 2) ~= 0
error('El número de triángulos (n) debe ser par para simetría de la
armadura.');
end
% Ancho de la base de cada triángulo (paso horizontal de los nodos).
dx = L / n;
% ======================
% 1. NODOS (Vectorizado para eficiencia)
% ======================
% Numero de nodos inferiores y superiores
num_triangles_per_chord = n / 2;
num_bottom_nodes = num_triangles_per_chord + 1; % Nodos 1, 3, 5, ...
num_top_nodes = num_triangles_per_chord; % Nodos 2, 4, 6, ...
num_nodes = num_bottom_nodes + num_top_nodes;
% --- 1.1 Coordenadas X
% La cuerda inferior se desfasa 2*dx
x_bottom = 0 : 2*dx : L;
% La cuerda superior se desfasa dx y luego 2*dx
x_top = dx : 2*dx : L - dx;
% --- 1.2 Matriz de Vertices [x, y]
% Se concatenan las coordenadas de la cuerda inferior (y=0) y superior
(y=h)
V=[
x_bottom', zeros(num_bottom_nodes, 1); % Cuerda Inferior
x_top', h * ones(num_top_nodes, 1) % Cuerda Superior
];
% ======================
% 2. BARRAS (Matriz de Conectividad)
B = zeros((n/2 - 1) * 2 + n, 2); % Inicializar la matriz B para eficiencia
k = 1; % Contador de barras
% 2.1 Cuerda Inferior
% Conecta nodos inferiores consecutivos (desde el 1 hasta el penúltimo)
for i = 1:num_bottom_nodes - 1
B(k, :) = [i, i+1];
k = k + 1;
end
% 2.2 Cuerda Superior
% Conecta nodos superiores consecutivos
start_node_index = num_bottom_nodes + 1;
for i = start_node_index : num_nodes - 1
B(k, :) = [i, i+1];
k = k + 1;
end
% 2.3 Diagonales (n elementos)
% Alternan la conexión entre cuerdas
for i = 1:n
if mod(i, 2) ~= 0 % Diagonales / (Inferior a Superior)
bottom_node = (i+1)/2;
top_node = num_bottom_nodes + (i+1)/2;
B(k, :) = [bottom_node, top_node];
else % Diagonales \ (Superior a Inferior)
top_node = num_bottom_nodes + i/2;
bottom_node = i/2 + 1;
B(k, :) = [top_node, bottom_node];
end
k = k + 1;
end
% 3. GRAFICAR
figure;
hold on;
grid on;
% Dibujar Barras
for i = 1:size(B,1)
p1 = V(B(i,1),:);
p2 = V(B(i,2),:);
plot([p1(1) p2(1)], [p1(2) p2(2)], 'k', 'LineWidth', 2);
end
% Marcar Nodos (TODOS los nodos en V son relevantes ahora)
plot(V(:,1), V(:,2), 'o', 'MarkerSize', 8, ...
'MarkerFaceColor', 'r', 'MarkerEdgeColor', 'r', 'LineStyle', 'none');
axis equal;
xlabel('Coordenada X');
ylabel('Coordenada Y');
title('Armadura Warren');
hold off;
end