.NET 4.x Площадь многоугольника - C#

Узнай цену своей работы

Формулировка задачи:

Ребят тут у меня такая задача, два дня уже решаю и тут у меня появился косяк, как его можно подправить? Дан плоский многоугольник координатами своих вершин. Определить площадь этого многоугольника. я эту задачу разделил на два этапа. Первый это вычисление длины отрезка через координаты точек, применяем теорему Пифагора AB = √ ((X2-X1)²+(Y2-Y1)²). а второй это по формуле Герона посчитать площадь многоугольник S = √p(p - a)(p - b)(p - c) где p полупериметр p = a + b + c/2 начал тестировать, выяснилось что площадь треугольников считает правильно а вот многоугольников с погрешностью. Начал разбираться, получается я использую только один полупериметр, мне надо как то в многоугольнике определить все полупериметра и вставить их в формулу S = √p(p - a)(p - b)(p - c). Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace mg
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] x = new int [10];
            int[] y = new int [10];
            double[] point = new double[10];
            double[] s = new double[10];
 
            int i, j = 0, k = 0;
            double ab, bc, ca, p = 0, sq = 0, st = 1, resp = 0;
 
            Console.WriteLine ("Введите количество вершин: ");
            int n = Int32.Parse(Console.ReadLine());
 
            Console.WriteLine("Введите координаты: ");
            for (i = 0; i < n; i++)
            {
                x[i] = int.Parse(Console.ReadLine()); // координата x
                y[i] = int.Parse(Console.ReadLine()); // координата y
            }
 
            foreach (var element in x)
            {
                Console.WriteLine("x = " + j + " " + element);
                j++;
            }
            foreach (var element in y)
            {
                Console.WriteLine("y = " + k + " " + element);
                k++;
            }
 
            for (i = 0; i < n; i++)
            {
                point[i] = Math.Sqrt(Math.Pow((y[i + 1] - y[i]), 2) + Math.Pow((x[i + 1] - x[i]), 2));
            }
 
            for (i = 0; i < n; i++)
            {
                Console.WriteLine("Длины сторон: " + point[i]);
            }
 
            //формула Герона
 
            for (i = 0; i < n; i++)
            {
                p = p + point[i]; //где p полупериметр
            }
            p = p / 2;
 
            Console.WriteLine("Полупериметр: " + p);
 
            for (i = 0; i < n; i++)
            {
                s[i] = p - point[i]; //вычитаем стороны периметр - стороны
            }
 
            for (i = 0; i < n; i++)
            {
                Console .WriteLine (s[i]); //вычитаем стороны ТЕСТ выводим на экран
            }

            for (i = 0; i < n; i++)
            {
                st = st * s[i]; //умножаем стороны
                Console.WriteLine("Умножаем все полученые стороны: " + st);
            }
 
            Console.WriteLine("все скобки умноженнные: " + st);
            
            sq = Math.Sqrt(p * st);

            Console.WriteLine("Площадь: " + sq);
            
        }
    }
}
подскажите пожалуйста

Решение задачи: «.NET 4.x Площадь многоугольника»

textual
Листинг программы
private void button1_Click(object sender, EventArgs e)
        {
            txt_coor.Text  = "1;3,6;6,2;1";
            
            var sample = txt_coor.Text;
            var points = sample.Split(',');
 
            var x = new int[points.Length];
            var y = new int[points.Length];
 
            for (int i = 0; i < points.Length; i++)
            {
                var point = points[i].Split(';');
                if (point.Length != 2)
                {
                    MessageBox.Show("Вы неправильн ввели коордитаны");
                }
                x[i] = Convert.ToInt32(point[0]);
                y[i] = Convert.ToInt32(point[1]);
            }
 
            foreach (var element in x)
            {
                lsb_x.Items.Add(element);
            }
 
            foreach (var element in y)
            {
                lsb_y.Items.Add(element);
            }
            
           // int j;
            int s, res = 0;
            int n = points.Length;
 
            for (int i = 0; i < n; i++)
            {
 
                if (i == 0)
                {
                    s = x[i] * (y[n - 1] - y[i + 1]); //если i == 0, то y[i-1] заменяем на y[n-1]
                    res += s;
                }
                else
                    if (i == n - 1)
                    {
                        s = x[i] * (y[i - 1] - y[0]); // если i == n-1, то y[i+1] заменяем на y[0]
                        res += s;
                    }
                    else
                    {
                        s = x[i] * (y[i - 1] - y[i + 1]);
                        res += s;
                    }
            }
 
            res = Math.Abs(res / 2);
            textBox2.Text = Convert .ToString (res);
            
            
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5
Похожие ответы