Resolución de triángulos

Sea un triángulo de lados a, b y c y de ángulos α, β y γ. En un triángulo de cumplen las siguientes relaciones:

Dados los datos (ángulos y/o lados). Las fórmulas que nos permiten calcular los lados y/o ángulos desconocidos son:

Para calcular los ángulos es preferible utilizar las primeras fórmulas en vez de las segundas, ya que el seno de un ángulo es igual al seno de su suplementario. sin(α)=sin(180-α). Por ejemplo, el seno de 30° y el seno de 150° tienen el mismo valor. El coseno evita este problema ya que determina sin ambigüedades el ángulo entre 0 y 180

Existen cuatro posibles casos, según los datos que se proporcionen, como se muestran en la figura y que se van a explicar en esta página

  1. Se proporcionan los tres lados a, b y c.
  2. Se calcula los ángulos α, β y γ

    α=arccos b 2 + c 2 a 2 2bc β=arccos a 2 + c 2 b 2 2ac γ=180ºαβ

  3. Se proporcionan los lados b y c y el ángulo comprendido α
  4. Se calcula el lado a y los ángulos β y γ

    a= b 2 + c 2 2bccosα β=arccos a 2 + c 2 b 2 2ac γ=180αβ

  5. Se proporciona un lado c y los dos ángulos adyacentes α y β
  6. Se calcula el ángulo γ, y los lados a y b

    γ=180αβ a=c sinα sinγ b=c sinβ sinγ

  7. Se proporcionan dos lados b y c y el ángulo no incluido β
  8. Se calcula el lado a y los ángulos α y γ

    No existe un triángulo cuyo ángulo β≥90° y a la vez bc

    El ángulo γ se calcula mediante la fórmula

    sinγ= c b sinβ

    Examinamos los posibles valores del miembro de la derecha

    Una vez obtenido el ángulo γ, se calcula α y a

    α=180βγ a=b sinα sinβ

tipo=input('Tipo (1,2,3,4): ');
switch tipo
    case 1
       disp('Tres lados')
       a=input('lado a: ');
       b=input('lado b: ');
       c=input('lado c: ');
       disp('------------------------------------')
       if((a+b)>c  && (a+c)>b  && (b+c)>a)
            alpha=acosd((b^2+c^2-a^2)/(2*b*c));
            beta=acosd((a^2+c^2-b^2)/(2*a*c));
            gamma=180-alpha-beta;
            disp(['ángulo alfa: ',num2str(alpha),' beta: ',
num2str(beta), ' gamma: ',num2str(gamma)])
            grafico_triangulo(a,b,c,alpha,beta,gamma)
         else
           disp('No hay solución')
       end
    case 2
       disp('Dos lados y el ángulo comprendido')
       alpha=input('ángulo alfa: ');
       b=input('lado b: ');
       c=input('lado c: ');
       disp('------------------------------------')
       a=sqrt(b^2+c^2-2*b*c*cosd(alpha));
       beta=acosd((a^2+c^2-b^2)/(2*a*c));
       gamma=180-alpha-beta;
       disp(['ángulo gamma: ',num2str(gamma),' beta: ',num2str(beta)])
       disp(['lado a: ',num2str(a)])
       grafico_triangulo(a,b,c,alpha,beta,gamma)
   case 3
        disp('Un lado y dos ángulos adyacentes')
        alpha=input('ángulo alfa: ');
        beta=input('ángulo beta: ');
        c=input('lado c: ');
        disp('------------------------------------')
        gamma=180-alpha-beta;
        disp(['ángulo gamma: ',num2str(gamma)])
        b=c*sind(beta)/sind(gamma);
        a=c*sind(alpha)/sind(gamma);
        disp(['lado a: ',num2str(a),' b: ',num2str(b)])
        grafico_triangulo(a,b,c,alpha,beta,gamma)
    case 4
        disp('Dos lados y el ángulo no comprendido')
        b=input('lado b: ');
        c=input('lado c: ');
        beta=input('ángulo beta:');
        disp('------------------------------------')
        if beta>=90 && b<=c
            disp('No hay solución')
        else
            res=c*sind(beta)/b;
            if(res>1)
                disp('No hay solución')
            else
                gamma=asind(res);
                alpha=180-gamma-beta;
                disp(['ángulo alfa: ',num2str(alpha),' gamma: ',
num2str(gamma)])
                a=b*sind(alpha)/sind(beta);
                disp(['lado a: ',num2str(a)])
                if b>=c
                    grafico_triangulo(a,b,c,alpha,beta,gamma)
                else
                    subplot(2,1,1)
                    grafico_triangulo(a,b,c,alpha,beta,gamma)
                    gamma=180-gamma;
                    alpha=180-gamma-beta;
                    disp(['ángulo alfa: ',num2str(alpha),' gamma: '
,num2str(gamma)])
                    a=b*sind(alpha)/sind(beta);
                    disp(['lado a: ',num2str(a)])
                    subplot(2,1,2)
                    grafico_triangulo(a,b,c,alpha,beta,gamma)
               end
            end
        end
    otherwise
        disp('Este caso no existe')
end
function grafico_triangulo(a,b,c,alpha,beta,gamma)
    plot([0,b*cosd(alpha),c,0],[0,b*sind(alpha),0,0],'-r')
    axis equal
    axis off
    text(c/2,0, num2str(c,'%2.2f'), 
'VerticalAlignment','top', 'HorizontalAlignment','center')
    text(b*cosd(alpha)/2,b*sind(alpha)/2,num2str(b,'%2.2f'),
'HorizontalAlignment','right', 'VerticalAlignment','middle')
    text(c-a*cosd(beta)/2,a*sind(beta)/2,num2str(a,'%2.2f'),
'HorizontalAlignment','left','VerticalAlignment','bottom')
    text(0,0,num2str(alpha,'%3.1f'),'HorizontalAlignment','right', 
'VerticalAlignment','middle')
    text(b*cosd(alpha),b*sind(alpha),num2str(gamma,'%3.1f'),
'HorizontalAlignment','center', 'VerticalAlignment','bottom')
    text(c,0,num2str(beta,'%3.1f'),'HorizontalAlignment','left', 
'VerticalAlignment','middle')
end

Ejemplos

  1. Se proporcionan los tres lados a, b y c.
  2. Tipo (1,2,3,4): 1
    Tres lados
    lado a: 8
    lado b: 6
    lado c: 7
    ------------------------------------
    ángulo alfa: 75.5225 beta: 46.5675 gamma: 57.91

  3. Se proporcionan los lados b y c y el ángulo comprendido α
  4. Tipo (1,2,3,4): 2
    Dos lados y el ángulo comprendido
    ángulo alfa: 49
    lado b: 5
    lado c: 7
    ------------------------------------
    ángulo gamma: 85.5883 beta: 45.4117
    lado a: 5.2987

  5. Se proporciona un lado c y los dos ángulos adyacentes α y β
  6. Tipo (1,2,3,4): 3
    Un lado y dos ángulos adyacentes
    ángulo alfa: 76
    ángulo beta: 34
    lado c: 9
    ------------------------------------
    ángulo gamma: 70
    lado a: 9.2931 b: 5.3557

  7. Se proporcionan dos lados b y c y el ángulo no incluido β
  8. Tipo (1,2,3,4): 4
    Dos lados y el ángulo no comprendido
    lado b: 8
    lado c: 13
    ángulo beta:31
    ------------------------------------
    ángulo alfa: 92.1819 gamma: 56.8181
    lado a: 15.5216
    ángulo alfa: 25.8181 gamma: 123.1819
    lado a: 6.7648

    Tipo (1,2,3,4): 4
    Dos lados y el ángulo no comprendido
    lado b: 10
    lado c: 4
    ángulo beta:120
    ------------------------------------
    ángulo alfa: 39.7321 gamma: 20.2679
    lado a: 7.3808

    Tipo (1,2,3,4): 4
    Dos lados y el ángulo no comprendido
    lado b: 3
    lado c: 5
    ángulo beta:120
    ------------------------------------
    No hay solución
    Tipo (1,2,3,4): 4
    Dos lados y el ángulo no comprendido
    lado b: 2
    lado c: 8
    ángulo beta:30
    ------------------------------------
    No hay solución

Referencias

WIKIPEDIA. Solution of triangles