Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Упорядочение массива точек

Ответить
Настройки темы
Теория - Упорядочение массива точек

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте. Имеем некоторый массив точек Point(float x, float y) (в примере ниже из 16 элементов). Фактически это координаты вершин некоторых правильных фигур, вложенных друг в друга. Мне нужно программно определять попадает ли пробная точка внутрь области, содержащей точки (внешнего многоугольника).



В предыдущей теме я пытался найти метод определения принадлежности точки области. Нашёл при помощи создания Path: создаём Path используя массив точек и при помощи метода IsVisible() узнаём принадлежит ли наша пробная точка области.

Сейчас трудность заключается в том, что массив из точек не упорядочен. В предыдущей теме я грубо задавал эти точки вбивая координаты вершин восьмиугольника руками, по часовой стрелке, например. Сейчас же набор точек из 16 элементов считается программой и может быть совершенно произволен. Если их соединить то получается не совсем то что нужно!



Т.е. задача сводится к тому чтобы или как-то упорядочить массив точек чтобы они шли последовательно (а потом уже создавать тот самый Path)... или найти такой метод в C#, который позволит по заданному набору точек построить фигуру, ограничивающую этот набор.

Какие будут предложения?

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 23:59, 27-09-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
Сейчас трудность заключается в том, что массив из точек не упорядочен. »
Это как?

Отправлено: 01:23, 28-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Изображения
Тип файла: png path3075.png
(11.5 Kb, 19 просмотров)

Tonny_Bennet, сейчас попробую аккуратно объяснить мысль...
дело в том, что приведенный первый рисунок описывает именно ту "страшную" фигуру, которая и получилась. Т.е. предположение о том, что это два правильных 8 угольника - неверно.
Цитата Tonny_Bennet:
Фактически это координаты вершин некоторых правильных фигур, вложенных друг в друга. »
Вот на этом этапе, утверждая, что фигуры правильные, мы накладываем ограничение на то, что координаты носят упорядоченный характер. Т.е. что ABCD - это квадрат, а ABCDEF - 6 угольник.

Есть мой любимый школьный пример про треугольники.
Например, есть треугольник ABC (см. картинку) он не равен треугольнику СВА, не смотря на то, что с виду они похожи.
Равенство треугольников приводит к равенствам сторон AB = CB, BC = BA, CA = AC. Так же из равенства треугольников следует равенство углов CAB = ACB, ABC = CBA, BCA = BAC, неравенство которых, при заданном треугольнике, должно развеять все сомнения.

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

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:44, 28-09-2011 | #3


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


lxa85 - пожайлуства еще раз сформулируй свою детскую задачку, или рисунок. просто треугольники у тебя равнобедренные с вершиной B и одинаковы, поэтому что ABC или CBA его назвать - одно и тоже. они равны.

а на счет вопроса по теме. да - при составлении фигуры надо указывать точки с порядке их примыкания друг к другу. т.е. нельзя указать как на битом рисунке 4-5-6-7 и т.д. он их и соединит построив поверхность. Есть тривиальное но неоптимальное решение, которое годится для относительно небольшого объема точек - это для полной выборки из всех точек трех строить поверхности и потом эту поверхность объеденить. Но это работает только для выпуклой фигуры, т.е. скажем звезду так не построить. более сложный - это упорядочивать точки. для правильной фигуры это достаточно просто - выбираешь первую точку, к ней перебираешь все точки находя длинну до них в 2-хмерной плоскости по координатам точек и из 2-х самых маленьких выбираешь произвольно любую, далее для найденной 2-ой точки делаешь абсолютно тоже самое, только исключив первую точку из списка перебора, самой маленькой длинны будет всего одна. и так далее. главное учти - поиск длинны должен быть в double а то могут быть пробемы

Отправлено: 12:22, 28-09-2011 | #4


Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Изображения
Тип файла: png path4013.png
(28.7 Kb, 17 просмотров)

Beyound,
Цитата Beyound:
пожайлуства еще раз сформулируй свою детскую задачку, или рисунок. »
Вот как то так. За основу взять прямоугольный треугольник, выполнено наложение треугольников с сопоставлением порядка следования вершин.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 13:05, 28-09-2011 | #5


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


Тему создавал ночью, после тяжёлого учебного дня, непростого рабочего дня и тренировки по волейболу. А потом ещё кодил это дело.... видно совсем устал тогда.

Сейчас попробую сформулировать задачу иначе:

Есть некоторый произвольный конечный набор точек на плоскости. Необходимо выделить точки из этого набора, при соединении которых получается замкнутая фигура, внутрь которой попадает весь набор точек.

Т.е. если рассматривать первый рисунок то на выходе я должен получить массив такого вида: 2, 10, 11, 9, 13, 5, 4, 6. Ну или подобный, сдвинутый на любое количество позиций.

Проводя мозговой штурм с единомышленниками-алгоритмизаторами пришли в такой идее:

Последовательно выбирая точки: от трёх до N, соединять их и получать фигуру. И проверять попадают ли точки из набора внутрь этой фигуры. Если хоть одна не попала - переходить к следующей фигуре, пока мы не найдём фигуру, внутрь которой попадают все точки набора. Это и будет фигура, ограничивающая весь набор.

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

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 10:25, 29-09-2011 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


это посмотрите
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 29-09-2011 | #7


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


ferget, спасибо. Gift wrapping - достаточно понятный и не сложный алгоритм. Попробую изобразить.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 16:20, 29-09-2011 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Упорядочение массива точек

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Упорядочение файлов в папке путем их перетаскивания Vadikan Microsoft Windows 7 60 21-04-2013 16:47
Разное - Очистка точек восстановления Eduard S. Microsoft Windows 7 3 01-07-2011 17:02
Службы - Тормозит из-за точек восстановления? gorill Microsoft Windows 7 15 17-12-2010 10:19
полосы из светлых точек peregon_zameuka Непонятные проблемы с Железом 4 15-04-2010 10:49
удаление точек востановления sil Microsoft Windows 95/98/Me (архив) 1 16-04-2004 16:33




 
Переход