Neste artigo vamos
lembrar um pouco de matemática básica com a ajuda da linguagem C#. Vamos criar um
pequeno programa para verificar se um ponto pertence a um determinado círculo.
Nosso objetivo será : Dados 1 ponto P(x,y) com sua respectiva coordenada, devemos verificar se o ponto pertence a uma circunferência de raio C(x,y) conhecido. |
Podemos concluir que
nesse caso o raio é menor que a distância do ponto P ao centro da
circunferência.
Então, como dPC > R podemos escrever:
(Cx – Px)^2 + (Cy – Py)^2
> Raio^2
Podemos
concluir que nesse caso o raio é maior que a distância do ponto
P ao centro da
circunferência.
Então, como dPC < R podemos escrever:
(Cx – Px)^2 +
(Cy – Py)^2 < Raio^2
Podemos concluir que
nesse caso o raio é igual à distância do ponto P ao centro da circunferência.
Então, como dPC = R podemos escrever:(Cx
– Px)^2 + (Cy – Py)^2 = Raio^2
Sendo assim, quando tivermos que verificar a posição relativa de um ponto em relação a uma circunferência, devemos calcular a distância entre o centro e o ponto, ou então substituir as coordenadas do ponto na equação da circunferência e verificar o valor numérico obtido.
fonte: http://www.brasilescola.com/matematica/posicoes-relativas-entre-ponto-circunferencia.htm (acessado em março de 2014)
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 Appliacation e informe o nome PontoECircunferencia e clique no botão OK;
No formulário form1.cs vamos incluir os seguintes controles:
1 TabControl - tabcPontoCircunferencia
4 TabPages
Em cada tabPage iremos definir uma forma de determinar a posição de um ponto em relação a uma circunferência:
Na tabPage1 - iremos usar as coordenadas do Ponto ,as coordenadas do centro da circunferência e o raio da circunferência:
Na tabPage2 - iremos usar as coordenadas do ponto e a equação Reduzida da circunferência
Na tabPage3 - iremos usar as coordenadas do Ponto e a equação Geral da circunferência
private void btnCalcular1_Click(object sender, EventArgs e)
{
int vpx1 = 0;
int vpy1 = 0;
int vcx1 = 0;
int vcy1 = 0;
int vr1 = 0;
double Dpc = 0.0;
//coordenadas do ponto P
vpx1 = Convert.ToInt32(txtPx1.Text);
vpy1 = Convert.ToInt32(txtPy1.Text);
//coordenadas do centro da circunferencia
vcx1 = Convert.ToInt32(txtCx.Text);
vcy1 = Convert.ToInt32(txtCy.Text);
vr1 = Convert.ToInt32(txtvr.Text);
//formula para calcular a distância entre o ponto P e o Centro da circunferência
Dpc = Math.Sqrt((Math.Pow((vpx1 - vcx1), 2) + Math.Pow((vpy1 - vcy1), 2)));
lblValor.Text = " Dpc = " + Dpc.ToString();
if (Dpc > vr1)
{
//exibe a imagem no controle PictureBox e o resultado
Image imagem = Image.FromFile(Application.StartupPath + "\\Imagens\\circ1.gif");
picCalc1.Image = imagem;
lblResultado.Text = " O ponto é externo à circunferência";
}
if (Dpc < vr1)
{
//exibe a imagem no controle PictureBox e o resultado
picCalc1.ImageLocation = (Application.StartupPath + "\\Imagens\\circ2.gif");
lblResultado.Text = " O ponto é interno à circunferência";
}
if (Dpc == vr1)
{
//exibe a imagem no controle PictureBox e o resultado
picCalc1.ImageLocation = (Application.StartupPath + "\\Imagens\\circ.gif");
lblResultado.Text = " O ponto esta na circunferência";
}
}
|
private void btnCalcular2_Click(object sender, EventArgs e)
{
//coordenadas do ponto
int vPx2 =0;
int vPy2 = 0;
//valores das coordenadas do centro
int vCv1 = 0;
int vCv2 = 0;
//valor do raio
int vCr = 0;
//valor do resultado
double Calc = 0.0;
//valor do ponto P
vPx2 = Convert.ToInt32(txtPx2.Text);
vPy2 = Convert.ToInt32(txtPy2.Text);
//valor do centro
vCv1 = Convert.ToInt32(txtv1.Text);
vCv2 = Convert.ToInt32(txtv2.Text);
//valor do raio
vCr = Convert.ToInt32(txtCr.Text);
//calculo da distância entre P e C
Calc = Math.Sqrt((Math.Pow((vPx2 - vCv1), 2) + Math.Pow((vPy2 - vCv2), 2)));
lblRaio.Text = " Raio = " + txtCr.Text;
lblValor2.Text = " Dpc = " + Calc.ToString();
if (Calc > vCr)
{
Image imagem = Image.FromFile(Application.StartupPath + "\\Imagens\\circ1.gif");
picCalc2.Image = imagem;
lblResultado2.Text = " O ponto é externo à circunferência";
}
if (Calc < vCr)
{
picCalc2.ImageLocation = (Application.StartupPath + "\\Imagens\\circ2.gif");
lblResultado2.Text = " O ponto é interno à circunferência";
}
if (Calc == vCr)
{
picCalc2.ImageLocation = (Application.StartupPath + "\\Imagens\\circ.gif");
lblResultado2.Text = " O ponto esta na circunferência";
}
}
|
private void btnCalcular3_Click(object sender, EventArgs e)
{
//coordenadas do ponto
int vPx3 = 0;
int vPy3 = 0;
//valores das coordenadas do centro
int vCv1 = 0;
int vCv2 = 0;
//valor do raio
int vCr = 0;
//valor do resultado
double Calc = 0.0;
//
double raio = 0.0;
//valor do ponto P
vPx3 = Convert.ToInt32(txtPx3.Text);
vPy3 = Convert.ToInt32(txtPy3.Text);
//valor do centro
vCv1 = Convert.ToInt32(txtCv1.Text);
vCv2 = Convert.ToInt32(txtCv2.Text);
//valor do raio
vCr = Convert.ToInt32(txtCvr.Text);
raio = Math.Sqrt(vCr);
//calculo da distância
Calc = Math.Sqrt((Math.Pow((vPx3 - vCv1), 2) + Math.Pow((vPy3 - vCv2), 2)));
//
lblRaio1.Text = " Raio = " + raio.ToString();
lblValor3.Text = " Dpc = " + Calc.ToString();
if (Calc > raio)
{
picCalc3.ImageLocation = (Application.StartupPath + "\\Imagens\\circ1.gif");
lblResultado3.Text = " O ponto é externo à circunferência";
}
if (Calc < raio)
{
picCalc3.ImageLocation = (Application.StartupPath + "\\Imagens\\circ2.gif");
lblResultado3.Text = " O ponto é interno à circunferência";
}
if (Calc == raio)
{
picCalc3.ImageLocation = (Application.StartupPath + "\\Imagens\\circ.gif");
lblResultado3.Text = " O ponto esta na circunferência";
}
}
|
Os cálculos usam a fórmula : expressa da seguinte forma na linguagem C#:
Math.Sqrt((Math.Pow((vPx3 - vCv1), 2) + Math.Pow((vPy3 - vCv2), 2)));
Onde usamos o namespace Math e os métodos estáticos Sqrt e Pow:
Math.Sqrt - Calcula a raiz quadrada de um número
Math.Pow - Eleva um número a um potência
Você pode melhorar o projeto em muitos aspectos como tratamento de erros, aceitar valores não inteiros, otimizar o código para remover código que esta duplicado, criar uma classe para realizar o cálculo, etc.
Fique a vontade, use o seu talento e aprenda C#.
Pegue o projeto completo aqui : PontoECircunferencia.zip
Tito 3:3 Porque também nós éramos outrora insensatos, desobedientes, extraviados, servindo a várias paixões e deleites, vivendo em malícia e inveja odiosos e odiando-nos uns aos outros.
Tito 3:4 Mas quando apareceu a bondade de Deus, nosso Salvador e o seu amor para com os homens,
Tito 3:5 não em virtude de obras de justiça que nós houvéssemos feito, mas segundo a sua misericórdia, nos salvou mediante o lavar da regeneração e renovação pelo Espírito Santo,
Tito 3:6 que ele derramou abundantemente sobre nós por Jesus Cristo, nosso Salvador;
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ??
Chegou o
Super DVD C# com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#