VB .NET -  Verificando a condição de alinhamento de 3 Pontos - II (Regra de Sarrus)


 
Na primeira parte deste artigo mostrei como podemos verificar a condição de alinhamento entre 3 pontos A, B e C verificando os coeficientes mAB e MBC dos segmentos referentes aos pontos AB e BC.
 
Neste artigo irei mostrar como podemos fazer a mesma verificação calculando o determinante de 3a ordem usando a regra de Sarrus.
 
Nosso objetivo será :
Dados 3 pontos  A, B e C com suas respectivas coordenadas, devemos verificar se os 3 pontos estão alinhados ou seja se pertencem à mesma reta.
 
Recursos usados:
 
Teoria
 
Considere os pontos A(x1,xy1, B(x2,y2), C(x3,y3). Colocando-os em um plano cartesiano percebemos que a união irá formar uma reta, ou seja, eles estão alinhados.
 
Três pontos estão alinhados se, e somente se, pertencerem à mesma reta.
 
 
Se os pontos A,B e C pertencem à mesma reta os pontos A, B e C pertencem à reta formada acima e o ponto B é comum aos segmentos AB e BC.
 
Dado três pontos distintos A (x1, y1), B (x2,y2) e C (x3, y3), eles serão alinhados se, somente se, os coeficientes mAB e mBC forem iguais.
 
Uma outra forma de verificar o alinhamento é calcular o determinante (usando a regra de Sarrus) envolvendo a matriz das coordenadas dos pontos.
 

Cálculo do determinando de ordem 3 pela regra de Sarrus

Dada a Matriz A de tipo 3 x 3 , o valor do determinante (det A) de A é obtido pela regra de Sarrus:

det A =

Essa regra diz que para encontrar o valor numérico de um determinante de ordem 3, basta repetir as duas primeiras colunas à direita do determinante e multiplicar os elementos do determinante da seguinte forma:

A aplicação da Regra de Sarrus consiste em escrever a matriz seguida da repetição de suas duas primeiras colunas. Feito esse processo, verifique a presença de três diagonais principais e três diagonais secundárias.

O determinante será calculado por meio da diferença entre o somatório do produto das três diagonais principais e o somatório do produto das três diagonais secundárias. Dessa forma:

Diagonal principal  =>  (a11 * a22 * a33) + (a12 * a23 * a31) + (a13 * a21 * a32)

Diagonal secundária  =>   (a13 * a22 * a31) + (a11 * a23 * a32) + (a12 * a21 * a33)

Determinante =>  D = {(a11 * a22 * a33) + (a12 * a23 * a31) + (a13 * a21 * a32)} – {(a13 * a22 * a31) + (a11 * a23 * a32) + (a12 * a21 * a33)}

Ou ainda podemos fazer da seguinte forma obtendo o mesmo resultado:

Criando o Projeto

Abra o Visual Studio Express 2012 for Windows Desktop e crie um novo projeto clicando em New Project;

A seguir selecione o template : Windows Forms Application e informe o nome VerificaCondicaoAlinhamento2 e clique no botão OK;

 

No formulário form1.vb vamos incluir os seguintes controles:

Disponha os controles no formulário conforme o leiaute abaixo:

 


Agora podemos definir o código do formulário.
 
O usuário deverá informar os valores das coordenadas nas caixas de texto : txtx1, txty1, txtx2, txty2, txtx3 e txty3.
 
Ao fazer isso os valores informados deverão ser colocados nas caixas de texto do cálculo do determinante. Para que isso ocorra vamos usar o evento TextChanged das caixas de texto e atribuir o valor informado na fórmula de cálculo.
 
Assim temos que primeiro definir as variáveis que vamos usar no programa:

 

Dim vx1 As Integer = 0

Dim vy1 As Integer = 0

Dim vx2 As Integer = 0

Dim vy2 As Integer = 0

Dim vx3 As Integer = 0

Dim vy3 As Integer = 0

Dim vz1 As Integer = 1

Dim vz2 As Integer = 1

Dim vz3 As Integer = 1

 

Dim detA As Double = 0.0

E a seguir definir o código para o evento TextChanged e cada uma das caixas de texto onde o usuário informará os valores:

 Private Sub txtx1_TextChanged(sender As Object, e As EventArgs) Handles txtx1.TextChanged
        Try
            x1.Text = txtx1.Text
            x11.Text = txtx1.Text
            vx1 = Convert.ToInt32(txtx1.Text)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txty1_TextChanged(sender As Object, e As EventArgs) Handles txty1.TextChanged
        Try
            y1.Text = txty1.Text
            y11.Text = txty1.Text
            vy1 = Convert.ToInt32(txty1.Text)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txtx2_TextChanged(sender As Object, e As EventArgs) Handles txtx2.TextChanged
        Try
            x2.Text = txtx2.Text
            x22.Text = txtx2.Text
            vx2 = Convert.ToInt32(txtx2.Text)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txty2_TextChanged(sender As Object, e As EventArgs) Handles txty2.TextChanged
        Try
            y2.Text = txty2.Text
            y22.Text = txty2.Text
            vy2 = Convert.ToInt32(txty2.Text)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txtx3_TextChanged(sender As Object, e As EventArgs) Handles txtx3.TextChanged
        Try
            x3.Text = txtx3.Text
            x33.Text = txtx3.Text
            vx3 = Convert.ToInt32(txtx3.Text)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txty3_TextChanged(sender As Object, e As EventArgs) Handles txty3.TextChanged
        Try
            y3.Text = txty3.Text
            y33.Text = txty3.Text
            vy3 = Convert.ToInt32(txty3.Text)
        Catch ex As Exception

        End Try
    End Sub

 
Após informar os valores o usuário deverá clicar no botão de comando - Verificar se os pontos estão Alinhados - para verificar se os pontos estão alinhados.
 
No evento Click deste botão temos o código que realiza os cálculos:
 
Private Sub btnVerificar_Click(sender As Object, e As EventArgs) Handles btnVerificar.Click
    calculaDeterminante()
End Sub
 

O código da rotina CalculaDeterminante() realiza o cálculo do determinante e verifica o alinhamento dos 3 pontos:

 

  Private Sub calculaDeterminante()
        Try
            Dim coluna1 As Double
            Dim coluna2 As Double
            coluna1 =
(vx1 * vy2 * vz3) + (vy1 * vz2 * vx3) + (vz1 * vx2 * vy3)
            coluna2 =
(vz1 * vy2 * vx3) + (vx1 * vz2 * vy3) + (vy1 * vx2 * vz3)
         
  detA = coluna1 - coluna2

            txtResultado.Text = detA

            If detA = 0 Then
                lblResultado.Text = "Os pontos estão na mesma reta."
            Else
                lblResultado.Text = "Os pontos Não estão na mesma reta."
            End If

        Catch ex As Exception
            MessageBox.Show(" Erro :" & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

 

Abaixo vemos dois resultados possíveis :

 

 

Você pode melhorar o projeto em muitos aspectos como realizar um tratamento de erros, aceitar valores não inteiros, etc.

 

Fique a vontade, use o seu talento e aprenda VB .NET.

 

Pegue o projeto completo aqui :  VerificaCondicaoAlinhamento2.zip

João 3:26 E foram ter com João e disseram-lhe: Rabi, aquele que estava contigo além do Jordão, do qual tens dado testemunho, eis que está batizando, e todos vão ter com ele.

João 3:27 Respondeu João: O homem não pode receber coisa alguma, se não lhe for dada do céu.

João 3:28 Vós mesmos me sois testemunhas de que eu disse: Não sou o Cristo, mas sou enviado adiante dele.

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti