none
C# Cálculo com matriz RRS feed

  • 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.

    quinta-feira, 21 de junho de 2018 04:24

Todas as Respostas

  • Alguém ???
    quarta-feira, 19 de setembro de 2018 17:59
  • 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.

    quinta-feira, 20 de setembro de 2018 14:51
  • Perfeito!

    Obrigado pela tua atenção e ajuda!

    Abraço.

    sábado, 22 de setembro de 2018 00:22