C# - Relações métricas em um triângulo retângulo


Hoje vamos criar uma aplicação usando os recursos da linguagem C# para mostrar as relações métricas em um triângulo retângulo.

Vamos começar lembrando com um pouco de teoria básica sobre o triângulo retângulo e suas relações.

O que é um triângulo retângulo?

É uma figura geométrica plana, composta por três lados e três ângulos internos sendo que um dos seus ângulos é igual a 90° (ângulo reto).

Os lados de um triângulo retângulo recebem nomes especiais:
  • O lado oposto ao ângulo reto é chamado de hipotenusa
  • Os outros dois lados são chamados de catetos

 


A seguir temos algumas das principais relações obtidas em um triângulo retângulo:

Vamos usar essas relações para calcular os lados e o ângulo de um triângulo retângulo usando a linguagem C#.

Abra o Visual Studio 2012 Express for desktop e crie um novo projeto do tipo Windows Forms Application com o nome RelacoesNoTriangulo:

A seguir vamos incluir no formulário form1.cs os seguintes controles:

Disponha os controles conforme mostra a figura abaixo:

No exemplo estamos tratando dois casos envolvendo triângulos retângulos:

1- O primeiro caso onde temos um triângulo retângulo com 1 ângulo conhecido igual a 30 graus e onde com a informação de um dos três outros lados iremos calcular os outros dois lados restantes. O usuário deverá marcar o lado para o qual informará o valor e usando o controle NumericUpDown informar o valor clicando a seguir no botão Calcular.

2- O segundo caso onde temos um triângulo retângulo com 1 lado conhecido (cateto adjacente ao ângulo Ang) e com a informação do ângulo ou de um dos outros dois lados calcularemos o lado/ângulo restante. O usuário deverá marcar o lado ou ângulo para o qual informará o valor e usando o controle NumericUpDown informar o valor clicando a seguir no botão Calcular.

Veja o código do botão Calcular para o primeiro caso:

private void btnCalcular1_Click(object sender, System.EventArgs e)
{
               //valor de A1
               double a = (double)(nudA1.Value);
               //valor de B1
               double b = (double)(nudB1.Value);
               //valor de C1 (hipotenusa)
               double c = (double)(nudC1.Value);
                //foi fornecido o valor de A1
	if (rbA1.Checked == true)
			{
                // tg 30 = cateto oposto / cateto adjacente => B1/A1
                // 30 graus = 30*pi/180 radianos
                // B1 = a * tg 30
	nudB1.Value =(decimal)(a*Math.Tan (30*Math.PI/180));
                // cosseno = cateto adjacente / hipotenusa => A1/C1
                // C1 = A1 / cos 30
	nudC1.Value =(decimal)(a/Math.Cos (30*Math.PI/180));
	}		
	else if (rbB1.Checked == true)
	{
                // tangente = cateto oposto  / cateto adjacente
                // tag 30 = B1/A1  
                // A1 = B1/tg 30
	nudA1.Value =(decimal)(b/Math.Tan (30*Math.PI /180));
                // seno = cateto oposto / hipotenusa => sen 30 = B1/C1
                // C1 = B1 / sen 30
	nudC1.Value =(decimal)(b/Math.Sin (30*Math.PI /180));
	}
	else if (rbC1.Checked == true)
	{
                // cosseno = cateto adjacente / hipotenusa => A1/C1
                // A1 = C1 * cos 30
	nudA1.Value =(decimal)(c*Math.Cos (30*Math.PI /180));
                // seno = cateto oposto / hipotenusa => sen 30 = B1/C1
                // B1 = sen 30 * C1
	nudB1.Value =(decimal)(c*Math.Sin (30*Math.PI /180));
	}
}

Veja o código do botão Calcular para o segundo caso:

private void btnCalcular2_Click(object sender, System.EventArgs e)
{
                //cateto adjacente 
	double a = 10;
                //cateto oposto B2
	double b2 = (double)(nudB2.Value);
                //  hipotenusa C2
	double c2 = (double)(nudC2.Value);
                // angulo 
	double angle = (double)(nudAng.Value);
                //informou valor de B2
	if (rbB2.Checked == true)
	{	
                // hipotenusa(C2) = raiz quadrada da soma dos catetos (b2 e a)
                // C2^2 =  ^2 + b2^2
	nudC2.Value = (decimal)(Math.Sqrt((b2 * b2) + (a * a)));
                // tag ang = catego oposto / cateto adjacente => B2/10
                //Atan => retorna o angulo cuja tangente é o  número especificado
	nudAng.Value = (decimal)(Math.Atan(b2/a)*180/Math.PI);
	}						
	else if (rbC2.Checked == true)  // forneceu valor para C2
	{
	     try
   	     {
                     // hipotenusa(C2) = raiz quadrada da soma dos catetos (b2 e a)
                     // C2^2 =  a^2 + b2^2
                     // b2 = sqrt( C2^2 - a^2)
	     nudB2.Value = (decimal)(Math.Sqrt((c2*c2) - (a*a)));
                     // cos ang = cateto adjacente / hipotenusa => a / C2
                     // Multiplicando  o valor de retorno por 180/Math.PI converte de radianos para graus.
                     // Acos => retorna o angulo cujo coseno é o  número especificado
	     nudAng.Value = (decimal)(Math.Acos((a/c2)*180/Math.PI));
	     }
	     catch(System.ArithmeticException caught)
	     {
		MessageBox.Show(caught.Message);
	     }
	}
	else if (rbAng.Checked == true)
	{
                     // tangente = cateto oposto / cateto adjacente => B2/10
                     // logo =>  10 * tangente = b2 
	     nudB2.Value = (decimal)(a*(Math.Tan(angle*Math.PI /180)));
                     //cosseno = cateto adjacente / hipotenusa => cos ang = a/C2
                     // C2 = a / cos ang
	     nudC2.Value = (decimal)(a/(Math.Cos(angle*Math.PI /180)));				
	}
     }

Em ambos os códigos estamos usando os seguintes métodos da classe Math para realizar os cálculos:

angulo = 30;
radianos = angulo * (Math.PI/180);
tesultado = Math.Tan(radianos);

A seguir vemos um exemplo de cálculo usando o programa onde fornecemos os valores para A1=2.5 e B2=6.0 e calculamos os demais.

É um exemplo básico que mostra como usar os recursos da classe Math para calcular e aprender um pouco das relações métricas em um triângulo retângulo.

Pegue o sistema completo aqui:  RelacoesNoTrianguloRetangulo.zip

João 6:38 Porque eu desci do céu, não para fazer a minha vontade, mas a vontade daquele que me enviou.

João 6:39 E a vontade do que me enviou é esta: Que eu não perca nenhum de todos aqueles que me deu, mas que eu o ressuscite no último dia.

Referências:


José Carlos Macoratti