Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 20:45   #1
Shenan
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 21
Печаль площадь многоугольника

Здравствуйте! есть программа которая высчитывает площадь многоугольника в текстовом файле (data.txt). файл имеет следующий вид:
1 4 17 9 13 15 21 19 6 12 , где первая цифра ничего не значит, вторая обозначает количество вершин многоугольника, далее через пробелы идут X и Y координаты вершин многоугольника.
Все вроде бы не плохо, но нужно чтобы считал плюс ко всему и 18ти угольник, а считает не правильно((
Код:
 internal class Program
    {
        private static void Main(string[] args)
        {
            List<double> massX = new List<double>();
            List<double> massY = new List<double>();
            string source = null;
            string[] data = null;
            try
            {
                FileStream fs = new FileStream(@"data.txt", FileMode.Open);
                StreamReader sr = new StreamReader(fs, Encoding.UTF8);
                while (sr.EndOfStream != true)
                {
                    source = sr.ReadLine();
                    data = source.Split(' ');
                }
                sr.Close();
            }
            catch(FileNotFoundException)
            {
                Console.WriteLine("Файл не найден!");
                return;
            }

            

            int vertexCount = 0;
            try
            {
                vertexCount = Convert.ToInt16(data[1]); // количество вершин
            }
            catch(FormatException)
            {
                Console.WriteLine("Некоректные данные!");
            }
           

            try
            {
                for (int i = 2; i < vertexCount*2 + 2; i++)
                {
                    if (i%2 == 0)
                    {
                        massX.Add(Convert.ToDouble(data[i]));
                            // координаты иксов
                    }
                    else
                    {
                        massY.Add(Convert.ToDouble(data[i]));
                            // координаты игриков
                    }
                }
            }
            catch(FormatException)
            {
                Console.WriteLine("Некоректные данные!");
            }
            var firstX = massX.First();
            var firstY = massY.First();
            for (int i = 0; i < vertexCount ; i++)
            {
                massX[i] = massX[i] - firstX; // смещение координат относительно 0
                massY[i] = massY[i] - firstY;
            }

            double summa = 0;
            try
            {
                for (int i = 0; i < vertexCount-1; i++)
                {
                    var t = Convert.ToDouble((massX[i + 1] - massX[i]));
                    var z = Convert.ToDouble((massY[i + 1] + massY[i]));

                    var m = Convert.ToDouble(((massX[i + 1] - massX[i])*(massY[i + 1] + massY[i]))/2);
                    summa += m;
                }
            }
            catch(UriFormatException)
            {
                Console.WriteLine("Некоректные данные!");

            
            }
            var square = Math.Abs(summa);

            Console.WriteLine("Количество вершин = {0}", vertexCount);
            Console.WriteLine("Площадь = {0}", square);
            Console.ReadKey();
        }
    }
Shenan вне форума Ответить с цитированием
Старый 25.05.2012, 22:15   #2
Defunate
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 83
По умолчанию

вроде 1/2 берется от всех определителей(определитель даёт расстояние между двумя точками)
Defunate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны площадь круга и площадь квадрата Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 10 17.01.2012 07:00
ООП (паскаль) - дан ромб. найти площадь. построить пирамиду, найти её площадь Rfn.if Помощь студентам 0 27.04.2011 16:10
Рисование многоугольника в C# vandrouny C# (си шарп) 3 11.10.2010 23:30
поворот многоугольника в паскале Belii09878 Помощь студентам 3 25.06.2010 16:20
Задача с периметром многоугольника Abakan Общие вопросы C/C++ 1 02.01.2009 19:06