% INVESTIGACIÓN ÁLGEBRA LINEAL
clear; clc; close all;
% Definición de puntos y vector
A = [1, 2, -1];
B = [4, -1, 2];
C = [2, 1, 3];
v = [2, -1, 1];
%% 1. Cálculo del vector AB, su norma y el ángulo con v
AB = B - A; % Vector AB
norma_AB = norm(AB); % Norma de AB
% Ángulo entre AB y v (usando el producto escalar)
% formula: cos(theta) = (AB . v) / (|AB| * |v|)
producto_punto = dot(AB, v);
norma_v = norm(v);
cos_theta = producto_punto / (norma_AB * norma_v);
angulo_rad = acos(cos_theta);
angulo_deg = rad2deg(angulo_rad);
fprintf('1. Vector AB: [%d, %d, %d]\n', AB);
fprintf(' Norma de AB: %.4f\n', norma_AB);
fprintf(' Ángulo entre AB y v: %.4f grados\n\n', angulo_deg);
%% 2. Definición de la recta r que pasa por A con dirección v
% Ecuación paramétrica: P = A + t*v
t = linspace(-5, 5, 100);
recta_x = A(1) + t*v(1);
recta_y = A(2) + t*v(2);
recta_z = A(3) + t*v(3);
%% 3. Vector normal del plano que pasa por A, B, C y su ecuación
% Vectores directores del plano
AB_vec = B - A;
AC_vec = C - A;
% El vector normal es el producto cruz de dos vectores en el plano
n = cross(AB_vec, AC_vec);
fprintf('3. Vector normal n: [%d, %d, %d]\n', n);
% La ecuación es: n1(x-x0) + n2(y-y0) + n3(z-z0) = 0
d = -dot(n, A);
fprintf(' Ecuación del plano: %dx + %dy + %dz + (%d) = 0\n\n', n(1), n(2), n(3), d);
%% 4. Graficación del plano, recta r y puntos A, B, C
figure(1);
hold on; grid on;
% Graficar puntos
scatter3([A(1) B(1) C(1)], [A(2) B(2) C(2)], [A(3) B(3) C(3)], 100, 'filled', 'r');
text(A(1), A(2), A(3), ' A'); text(B(1), B(2), B(3), ' B'); text(C(1), C(2), C(3), ' C');
% Graficar la recta r
plot3(recta_x, recta_y, recta_z, 'b', 'LineWidth', 2, 'DisplayName', 'Recta r');
% Graficar el plano
[X, Y] = meshgrid(0:5, 0:5);
% Despejando Z de la ecuación: n1*x + n2*y + n3*z + d = 0 -> z = (-d - n1*x - n2*y)/n3
Z = (-d - n(1)*X - n(2)*Y) / n(3);
surf(X, Y, Z, 'FaceAlpha', 0.3, 'EdgeColor', 'none', 'DisplayName', 'Plano ABC');
xlabel('Eje X'); ylabel('Eje Y'); zlabel('Eje Z');
title('Visualización de Recta, Plano y Puntos');
legend('Puntos A, B, C', 'Recta r', 'Plano ABC');
view(3);