Inquiridor
C# Cálculo com matriz

Discussão Geral
-
Quando eu tenho 3 vértices, que possuem valores "x" e "y" cada, formam uma matriz 3x2, representada dessa forma:
| x1 y1 |
| x2 y2 |
| x3 y3 |
Tendo uma matriz 3x2 ele faz o seguinte cálculo:
if (cbVertices.Text == "3")
{
x1 = Convert.ToDecimal(tbCX1.Text);
x2 = Convert.ToDecimal(tbCX2.Text);
x3 = Convert.ToDecimal(tbCX3.Text);
y1 = Convert.ToDecimal(tbCY1.Text);
y2 = Convert.ToDecimal(tbCY2.Text);
y3 = Convert.ToDecimal(tbCY3.Text);
divisor = Convert.ToInt32(2);
resultado = (((x1 * y2) + (x2 * y3) + (x3 * y1)) - ((y1 * x2) + (y2 * x3) + (y3 * x1))) / divisor;
tbResultado.Text = resultado.ToString();
}
O que eu preciso é que, se houverem 8 vértices, 10 vértices, 100 vértices e X vértices, faça a equação automaticamente no mesmo padrão mostrado antes, só que adicionando mais valores a equação, por exemplo para 5 vértices:
Matriz tipo 5x2
| x1 y1 |
| x2 y2 |
| x3 y3 |
| x4 y4 |
| x5 y5 |
Código:
resultado = (((x1 * y2) + (x2 * y3) + (x3 * y4) + (x4 * y5) + (x5 * y1)) - ((y1 * x2) + (y2 * x3) + (y3 * x4) + (y4 * x5) + (y5 * x1))) / divisor;Valores em negrito adicionados.
As matrizes sempre serão nx2, sempre com 2 colunas, mas variando o número de linhas, com número mínimo de 3 linhas, ou seja, 3x2.
Os valores de "x" e "y" são apresentados em uma listBox para cada um (uma para "x" e outra para "y").
Alguém poderia me dar uma mão quanto a isso?
Desde já, agradeço.
- Editado RBVA quinta-feira, 21 de junho de 2018 04:42
- Tipo Alterado Filipe B CastroModerator quinta-feira, 21 de junho de 2018 22:28
Todas as Respostas
-
-
Olá programador,
pode tentar resolver isto da da seguinte forma:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
public partial class FrmAux : Form
{
decimal x, y, somaX = 0, somaY = 0;
decimal divisor = Convert.ToDecimal(2);
public FrmAux()
{
InitializeComponent();
}
private Decimal CalcularVertices()
{
decimal resultado;
//Calcular X
int elX = listX.Items.Count; //Contar o número de vértices no listBox de x.
int elY = listY.Items.Count; //Contar o número de vértices no listBox de y.
//Validar a igualdade de elementos.
if (elX.Equals(elY))
{
//Calcular o valor de x
for(int i = 0; i <= elX -1; i++)
{
x = decimal.Parse(listX.Items[i].ToString());
if(i == elX -1)
y = decimal.Parse(listY.Items[0].ToString());
else
y = decimal.Parse(listY.Items[i +1].ToString());
somaX += x * y;
}
//Calcular o valor de y
for (int i = 0; i <= elY - 1; i++)
{
y = decimal.Parse(listY.Items[i].ToString());
if (i == elY - 1)
x = decimal.Parse(listX.Items[0].ToString());
else
x = decimal.Parse(listX.Items[i + 1].ToString());
somaY += y * x;
}
//Calcular o resultado
resultado = (somaX - somaY) / divisor;
return resultado;
}
else
{
MessageBox.Show("O número de vértices em x não é igual ao número de vértices em y");
return 0;
}
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = string.Format("O resultado é : {0}", CalcularVertices().ToString());
}
}Se te serviu de ajuda, marque a resposta.
-