Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 08.10.2015
Сообщений: 41

Найти минимальный по площади многоугольник

25.01.2017, 11:06. Показов 2113. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На плоскости задано N точек своими координатами и матрица C(N*N); C(i,j)=C(j,i)=1 в случае, если вершины i и j соединены отрезком и 0 иначе. Известно, что любая вершина соединена по крайней мере с двумя другими, и что отрезки пересекаются только в концевых точках. Таким образом, вся плоскость разбивается на множество многоугольников. Задана точка Z(x,y). Найти минимальный по площади многоугольник, содержащий Z, или выдать сообщение, что такого не существует. Если Z принадлежит какому-то отрезку, то выдать его концевые точки, если Z лежит в многоугольнике, то выдать его вершины в порядке обхода по контуру.
Смог реализовать ввод точек с координатами и матрицу, с остальным запара, с геометрией, да и с математикой в общем не особо дружу, помогите дописать.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int x, y, n;
 
            Console.WriteLine("Введите количество точек:");
            n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите координаты точки (x,y):");
            for (int i = 0; i < n; i++)
            {
                x = Convert.ToInt32(Console.ReadLine());
                y = Convert.ToInt32(Console.ReadLine());
            }
            int[,] C = new int[n, n];
            Random rnd = new Random();
            Console.WriteLine("Матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    C[i, j] = rnd.Next(0, 10);
                    Console.Write(C[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2017, 11:06
Ответы с готовыми решениями:

Найти минимальный по площади многоугольник
На плоскости задано N точек своими координатами и матрица C(n,n) ;C(i,j)=C(j,i)=1 в случае, если вершины i и j соединены отрезком и 0...

Найти минимальный по площади выпуклый многоугольник, что все точки лежат внутри этого многоугольника
N точек на плоскости заданы своими координатами. Найти такой минимальный по площади выпуклый многоугольник, что все N точек лежат либо...

Найти контур объединения: минимальный многоугольник, охватывающий все заданные прямоугольники
Помогите ,пожалуйста, написать программу для СИ. Вот формулировка задания: Задано n прямоугольников на плоскости. Найти контур их...

2
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
25.01.2017, 20:37
1) Разбить граф на компоненты связности.
2) Отсортировать компоненты в порядке возрастания площадей их выпуклых оболочек. Причём точка должна входить в выпуклую оболочку, иначе компонента не даст решения.
3) Решить задачу отдельно для каждой компоненты (или пока не найдётся подходящий многоугольник).
4) Взять произвольный контур в компоненте.
a) Точка находится внутри контура
- Найти ребро, соединяющее две точки контура и центр которого лежит внутри контура. Таким образом контур разбивается на два, в одном из которых лежит точка Z. Продолжаем обрабатывать этот контур рекурсивно. Иначе:
- Если нет точек, лежащих внутри контура, то решение найдено. Иначе:
- Ищем простой путь из одной точки контура до другой, через внутреннюю точку, смежную по ребру с этим контуром. Этот путь, опять же, разобьёт контур на два, в одном из которых лежит точка Z. Продолжаем рекурсию. Иначе, если такого пути не существует:
- Удалим все рёбра между контуром и его внутренними точками. Решим вне очереди задачу для подграфа, состоящего из внутренних точек контура. Если решение положительное, то решение найдено, если нет - решением является контур из предыдущего шага
б) Точка находится вне контура (выполняем следующие пункты пока точка не окажется внутри контура, или контур не станет максимальным по площади (тогда, когда ни один шаг выполнить не удастся)). Если удастся найти контур в котором содержится точка Z, выполнить пункт 4a.
- Найти ребро, соединяющее две точки контура и центр которого лежит вне контура. (Из двух возможных контуров, возьмём наибольший по площади). Продолжаем обрабатывать новый контур рекурсивно. Иначе:
- Если нет точек, лежащих вне контура, то решения нет. Иначе:
- Ищем простой путь из одной точки контура до другой, через внешнюю точку, смежную по ребру с этим контуром. При помощи этого пути увеличим наш контур. (Из двух возможных контуров, возьмём наибольший по площади). Если пути нет:
- Удаляем все рёбра между контуром и внешними точками. Решением является решения для подграфа, состоящего из внешних точек.

Можно забыть всё, что написано выше, перебрать все сочетания вершин, проверить каждое сочетание, образует ли оно контур, определить вхождение точки в контур, и выбрать такой контур с минимальной площадью.

Добавлено через 18 минут
Цитата Сообщение от TopLayer Посмотреть сообщение
перебрать все сочетания вершин
Поправка: перестановки вершин разной длины
0
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 967
27.01.2017, 08:31
а многоугольники всегда будут выпуклыми?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2017, 08:31
Помогаю со студенческими работами здесь

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

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

Егэшная задача (С4): найти отношение площади треугольника к площади трапеции.
Помогите пожалуйста решить второй вариант решений Периметр равнобедренной трапеции 52.В трапецию вписана окр. делящая боковые стороны в...

Создать базовый класс Многоугольник и наследовать от него правильный многоугольник.
Нужна помощь. В вузе практика, осталась последняя задача. Помогите кодом. ТЗ: Создать базовый класс Многоугольник( может быть...

Ввести количество точек, получить многоугольник, закрасить многоугольник построчно.
Здравствуйте, есть программа написанная на С++ Builder, (см архив) у меня почему то она виснет( Суть программы такова сперва нужно ввести...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru