title: Calculating Area of Irregular Polygon in C#
body: <p>I've managed to write a 'for dummies' how to calculate the area of irregular polygon in C#, <strong>but I need it to be dynamic for any amount of verticies</strong>.</p>
  
  <p>Can someone please help?</p>
  
  <p>Class:</p>
  
  <pre><code>public class Vertex
  {
      private int _vertexIdx;
      private double _coordX;
      private double _coordY;
      private double _coordZ;
  
      public Vertex()
      { }
  
      public Vertex(int vertexIdx, double coordX, double coordY, double coordZ)
      {
          _vertexIdx = vertexIdx;
          _coordX = coordX;
          _coordY = coordY;
          _coordZ = coordZ;
      }
  
      public int VertexIdx
      {
          get { return _vertexIdx; }
          set { _vertexIdx = value; }
      }
  
      public double X
      {
          get { return _coordX; }
          set { _coordX = value; }
      }
  
      public double Y
      {
          get { return _coordY; }
          set { _coordY = value; }
      }
  
      public double Z
      {
          get { return _coordZ; }
          set { _coordZ = value; }
      }
  }
  </code></pre>
  
  <p>Form_Load:</p>
  
  <pre><code>List&lt;Vertex&gt; verticies = new List&lt;Vertex&gt;();
  
  verticies.Add(new Vertex(1, 930.9729, 802.8789, 0));
  verticies.Add(new Vertex(2, 941.5341, 805.662, 0));
  verticies.Add(new Vertex(3, 946.5828, 799.271, 0));
  verticies.Add(new Vertex(4, 932.6215, 797.0548, 0));
  </code></pre>
  
  <p><code>dataGridView1.DataSource = verticies;</code></p>
  
  <p>Code to calculate when button is pressed: (hard-coded for 4 points polygon - should be for any amount...)</p>
  
  <pre><code>        // X-coords
          double x1;
          double x2;
          double x3;
          double x4;
          double x5;
  
          // Y-coords
          double y1;
          double y2;
          double y3;
          double y4;
          double y5;
  
          // Xn * Yn++
          double x1y2;
          double x2y3;
          double x3y4;
          double x4y5;
  
          // Yn * Xn++
          double y1x2;
          double y2x3;
          double y3x4;
          double y4x5;
  
          // XnYn++ - YnXn++
          double x1y2my1x2;
          double x2y3my2x3;
          double x3y4my3x4;
          double x4y5my4x5;
  
          double result;
          double area;
  
          x1 = Convert.ToDouble(dataGridView1.Rows[0].Cells[1].Value.ToString());
          y1 = Convert.ToDouble(dataGridView1.Rows[0].Cells[2].Value.ToString());
          txtLog.Text += String.Format("X1 = {0}\tY1 = {1}\r\n", x1, y1);
  
          x2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[1].Value.ToString());
          y2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[2].Value.ToString());
          txtLog.Text += String.Format("X2 = {0}\tY2 = {1}\r\n", x2, y2);
  
          x3 = Convert.ToDouble(dataGridView1.Rows[2].Cells[1].Value.ToString());
          y3 = Convert.ToDouble(dataGridView1.Rows[2].Cells[2].Value.ToString());
          txtLog.Text += String.Format("X3 = {0}\tY3 = {1}\r\n", x3, y3);
  
          x4 = Convert.ToDouble(dataGridView1.Rows[3].Cells[1].Value.ToString());
          y4 = Convert.ToDouble(dataGridView1.Rows[3].Cells[2].Value.ToString());
          txtLog.Text += String.Format("X4 = {0}\tY4 = {1}\r\n", x4, y4);
  
          // add the start point again
          x5 = Convert.ToDouble(dataGridView1.Rows[0].Cells[1].Value.ToString());
          y5 = Convert.ToDouble(dataGridView1.Rows[0].Cells[2].Value.ToString());
          txtLog.Text += String.Format("X5 = {0}\tY5 = {1}\r\n", x5, y5);
          txtLog.Text += "\r\n";
  
          // Multiply 
          x1y2 = x1 * y2;
          x2y3 = x2 * y3;
          x3y4 = x3 * y4;
          x4y5 = x4 * y5;
  
          y1x2 = y1 * x2;
          y2x3 = y2 * x3;
          y3x4 = y3 * x4;
          y4x5 = y4 * x5;
  
          // Subtract from each other
          x1y2my1x2 = x1y2 - y1x2;
          x2y3my2x3 = x2y3 - y2x3; 
          x3y4my3x4 = x3y4 - y3x4;
          x4y5my4x5 = x4y5 - y4x5;
  
          // Sum all results
          result = x1y2my1x2 + x2y3my2x3 + x3y4my3x4 + x4y5my4x5;
          area = Math.Abs(result / 2);
  
          txtLog.Text += String.Format("Area = {0}\r\n", area);
  </code></pre>
  
  <p>Example output:</p>
  
  <p>X1 = 930.9729
  Y1 = 802.8789</p>
  
  <p>X2 = 941.5341
  Y2 = 805.662</p>
  
  <p>X3 = 946.5828
  Y3 = 799.271</p>
  
  <p>X4 = 932.6215
  Y4 = 797.0548</p>
  
  <p>X5 = 930.9729
  Y5 = 802.8789</p>
  
  <p>Area = 83.2566504099523</p>