Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350

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

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

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

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

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

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

12
71 / 58 / 31
Регистрация: 05.09.2013
Сообщений: 666
23.04.2015, 16:20
Так сразу не придумаешь. Как срочно надо?
0
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
23.04.2015, 16:42  [ТС]
Нужно в ближайшие дни
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.04.2015, 18:18
Лучший ответ Сообщение было отмечено Worldmen как решение

Решение

Архивы программ скачиваются
Вложения
Тип файла: zip PolygonTriangulation_src.zip (53.9 Кб, 81 просмотров)
3
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
24.04.2015, 23:38  [ТС]
Начал ее трассировать, но ума не хватает понять смысл. Интересно, этот алгоритм понимает кто-нибудь? Похоже нужно находить точку входа и точку выхода и не задумываться как оно работает.
А хотелось бы понять.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.04.2015, 23:45
Worldmen, а вам обязательно триангуляцию делать надо? Это условие задания?
Есть же более простые способы нахождения площади простых многоугольников
0
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
25.04.2015, 10:17  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Есть же более простые способы нахождения площади простых многоугольников
Если вы знаете, подскажите. Я пока не нашел.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2015, 15:54
Лучший ответ Сообщение было отмечено 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
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
25.04.2015, 22:57  [ТС]
Теорему Грина я не понял. По предоставленному коду составил пример и по нему мне выводило:
Кликните здесь для просмотра всего текста
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
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.04.2015, 23:48
Вот подробное описание алгоритма, реализованного в программе: Триангуляция полигонов (ушная + монотонная)
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2015, 23:52
Цитата Сообщение от Worldmen Посмотреть сообщение
для 1-го = 1000 , а для 2-го= 3050.
Всё правильно.

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

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

Для проверки можете воспользоваться вот тим онлайновым калькулятором (до 10 точек). Или вот этим.
0
 Аватар для Worldmen
5 / 8 / 4
Регистрация: 31.08.2013
Сообщений: 350
26.04.2015, 09:32  [ТС]
Действительно правильно считает. Это я не правильно задал координаты точек.
0
26 / 26 / 29
Регистрация: 11.02.2012
Сообщений: 101
26.04.2015, 11:25
Есть еще красивый и легко реализуемый способ определения площади фигуры методом Монте-Карло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2015, 11:25
Помогаю со студенческими работами здесь

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

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

Вычислить площадь многоугольника
Многоугольник на плоскости задан координатами своих вершин в порядке их обхода. Найти площадь. N- кол.во вершин (3 &lt;= n &lt;= 100) ...

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru