Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
1

Вычислить площадь произвольного многоугольника, нарисованного на форме

23.04.2015, 16:03. Показов 3863. Ответов 12
Метки нет (Все метки)

Требуется: вычислить площадь произвольного многоугольника нарисованного на форме.
Дано: на форме по щелчку мыши рисуется многоугольник. Поэтому исходными данными будут координаты точек вершин и исходя из этого - можно найти длины каждой стороны.
Что получилось: получилось вычислить площадь многоугольника с помощью формулы Герона, разбив многоугольник на треугольники (рис.1).
Проблема: как оказалось такой многоугольник - частный случай. И если будет другой (рис.2) - то такой способ не подойдет.
Я пока не придумал как вычислить эту площадь. Алгоритм разбивки на треугольники пока не получается.
Нашел на одном сайте описание про некоего Гарри Мейстерса и его "теорему о двух ушах" -по поиску я не нашел о нем ничего. На сайте представлена теория вкратце и программный код (не до конца), архивы программ не скачиваются.
0
Изображения
  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2015, 16:03
Ответы с готовыми решениями:

Площадь произвольного многоугольника
Здравствуйте, хочу попросить у вас помощь. Есть у меня задача: дано произвольный многоугольник...

Программа должна находить площадь произвольного многоугольника
Здравствуйте. Моя программа должна находит площадь произвольного многоугольника, с предварительной...

Вычислить площадь многоугольника с использованием функции,которая определяет площадь по координатам его вершин
Народ помогите пож нужно очень срочно. совсем запутался с этим задание,буду благодарен за помощь....

Вычислить площадь многоугольника
Не могу понять почему VS 2015 всегда показывает площадь равную 0, в то время как dev C++ вычисляет...

12
68 / 55 / 31
Регистрация: 05.09.2013
Сообщений: 665
23.04.2015, 16:20 2
Так сразу не придумаешь. Как срочно надо?
0
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
23.04.2015, 16:42  [ТС] 3
Нужно в ближайшие дни
0
8173 / 4432 / 1735
Регистрация: 11.02.2013
Сообщений: 9,421
23.04.2015, 18:18 4
Лучший ответ Сообщение было отмечено Worldmen как решение

Решение

Архивы программ скачиваются
3
Вложения
Тип файла: zip PolygonTriangulation_src.zip (53.9 Кб, 53 просмотров)
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
24.04.2015, 23:38  [ТС] 5
Начал ее трассировать, но ума не хватает понять смысл. Интересно, этот алгоритм понимает кто-нибудь? Похоже нужно находить точку входа и точку выхода и не задумываться как оно работает.
А хотелось бы понять.
0
Эксперт .NET
14879 / 11265 / 2952
Регистрация: 17.09.2011
Сообщений: 18,867
24.04.2015, 23:45 6
Worldmen, а вам обязательно триангуляцию делать надо? Это условие задания?
Есть же более простые способы нахождения площади простых многоугольников
0
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
25.04.2015, 10:17  [ТС] 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Есть же более простые способы нахождения площади простых многоугольников
Если вы знаете, подскажите. Я пока не нашел.
0
Эксперт .NET
14879 / 11265 / 2952
Регистрация: 17.09.2011
Сообщений: 18,867
25.04.2015, 15:54 8
Лучший ответ Сообщение было отмечено Worldmen как решение

Решение

Worldmen, можно взять за основу теорему Грина, на принципах которой работает планиметр.

C#
1
2
3
4
5
6
7
8
9
10
11
12
double Area(Point[] polygon)
{
   double area = 0;
   for (int i = 0; i < polygon.Length; i++)
   {
      int j = (i + 1) % polygon.Length;
      Point a = polygon[i], b = polygon[j];
 
      area += a.X * b.Y - a.Y * b.X;
   }
   return Math.Abs(area) / 2;
}
Предполагается, конечно, что полигон простой, то есть не самопересекающийся и без "дырок".
3
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
25.04.2015, 22:57  [ТС] 9
Теорему Грина я не понял. По предоставленному коду составил пример и по нему мне выводило:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        static void Main(string[] args)
        {
            Point[] polygon = new Point[4]{
            new Point(10,10),
            new Point(60,10),
            new Point(100,60),
            new Point(100,10)
            };
 
            Point[] polygon2 = new Point[8]{
            new Point(10,10),
            new Point(20,30),
            new Point(20,60),
            new Point(50,50),
            new Point(110,60),
            new Point(90,40),
            new Point(100,10),
            new Point(50,20),
            };
 
 
            double pl;
            pl = Area(polygon);
            Console.WriteLine("Площадь = {0}", pl);
            pl = Area(polygon2);
            Console.WriteLine("Площадь = {0}", pl);
            Console.ReadKey();
        }
 
        static double Area(Point[] polygon)
        {
            double area = 0;
            for (int i = 0; i < polygon.Length; i++)
            {
                int j = (i + 1) % polygon.Length;
                Point a = polygon[i], b = polygon[j];
 
                area += a.X * b.Y - a.Y * b.X;
            }
            return Math.Abs(area) / 2;
        }
    }

для 1-го = 1000 , а для 2-го= 3050. При том, что второй по площади явно меньше. Или данный пример не является методом подсчета площади?
0
8173 / 4432 / 1735
Регистрация: 11.02.2013
Сообщений: 9,421
25.04.2015, 23:48 10
Вот подробное описание алгоритма, реализованного в программе: Триангуляция полигонов (ушная + монотонная)
1
Эксперт .NET
14879 / 11265 / 2952
Регистрация: 17.09.2011
Сообщений: 18,867
25.04.2015, 23:52 11
Цитата Сообщение от Worldmen Посмотреть сообщение
для 1-го = 1000 , а для 2-го= 3050.
Всё правильно.

Цитата Сообщение от Worldmen Посмотреть сообщение
При том, что второй по площади явно меньше.
Именно для этих целей придумали математику: чтобы личное восприятие реальности не вставало на пути познания истины (см. оптические иллюзии).

Цитата Сообщение от Worldmen Посмотреть сообщение
Или данный пример не является методом подсчета площади?
Является

Для проверки можете воспользоваться вот тим онлайновым калькулятором (до 10 точек). Или вот этим.
0
4 / 5 / 4
Регистрация: 31.08.2013
Сообщений: 324
26.04.2015, 09:32  [ТС] 12
Действительно правильно считает. Это я не правильно задал координаты точек.
0
26 / 26 / 29
Регистрация: 11.02.2012
Сообщений: 101
26.04.2015, 11:25 13
Есть еще красивый и легко реализуемый способ определения площади фигуры методом Монте-Карло.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2015, 11:25

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Вычислить площадь многоугольника
Задача 33* Выпуклый многоугольник задан координатами своих вершин. Вершины упорядочены....

Вычислить площадь многоугольника
Многоугольник на плоскости задан координатами своих вершин в порядке их обхода. Найти площадь. ...

Вычислить площадь многоугольника
Доброго времени суток, уважаемые форумчане. Мне кое-что непонятно насчет комбинированных типов с...

Вычислить площадь выпуклого многоугольника
Вычислить площадь выпуклого многоугольника с n вершинами, коорднаты которых заданы в порядке обхода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.