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

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

Ответить
Настройки темы
Теория - [решено] Принадлежность точки к восьмиугольнику

Аватара для Tonny_Bennet

Ветеран


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


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

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


Здравствуйте.

Пишу программу, частью алгоритма которой является проверка на принадлежность заданной точки на плоскости заданному восьмиугольнику. На время отладки аппроксимировал восьмиугольник кругом заданного радиуса. Теперь решил перейти к восьмиугольнику. (сейчас я задаю его при помощи координат вершин; если есть какой-нибудь другой метод скажите пожалуйста). Нашёл на просторах Интернета интересную идею: построить с пробной точкой и соседними вершинами восьмиугольника треугольники. Просуммировать их площадь. Если сумма площадей равна площади восьмиугольника - точка внутри, иначе - снаружи. Просто и не затратно, подумал я. Закодил.

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

И вот если ставить точное равенство то картина получается не полная... некоторые фрагменты отсутствуют. Если поставить меньше или равно - по-моему появляются и лишние элементы рисунка

В общем я думаю это из-за несовершенства алгоритма проверки принадлежности точки.

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


Отправлено: 00:39, 25-09-2011

 

Аватара для ferget

Разный


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

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


а чем вам не нравится метод трассировки луча?

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



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

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


Аватара для Tonny_Bennet

Ветеран


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

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


Цитата ferget:
а чем вам не нравится метод трассировки луча? »
тем что он слишком уж громоздкий.

проблему решил встроенными средствами C#. Построил область. Нашёл метод определяющий принадлежит ли точка области.

Код: Выделить весь код
            PointF[] _oct_vertex = new PointF[8];
            _oct_vertex[0] = new PointF(1,0);
            _oct_vertex[1] = new PointF(2.5f, 0);
            _oct_vertex[2] = new PointF(3.5f, 1);
            _oct_vertex[3] = new PointF(3.5f, 2.5f);
            _oct_vertex[4] = new PointF(2.5f, 3.5f);
            _oct_vertex[5] = new PointF(1, 3.5f);
            _oct_vertex[6] = new PointF(0, 2.5f);
            _oct_vertex[7] = new PointF(0, 1);

            
            byte[] _type_vertex = new byte[8];

            _type_vertex[0] = (byte)PathPointType.Start;

            for (int i=1; i<=_type_vertex.Length -1; i++)
            {
                _type_vertex[i] = (byte)PathPointType.Line;
            }

            Region octagon = new Region(new GraphicsPath(_oct_vertex, _type_vertex));


            if (octagon.IsVisible(pt))
            {
                return true;
            }
            else
            {
                return false;
            }

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


Отправлено: 01:18, 25-09-2011 | #3


Ветеран


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

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


Цитата ferget:
а чем вам не нравится метод трассировки луча?
ferget, это не оно?!
читать дальше »
Кушниренко Лебедев Проект Выпуклая оболочка. Там эта задача:

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

Если вкратце, то определение, принадлежит ли точка полигону, заданному координатами своих вершин, сводится к перебору рёбер полигона (отрезков, соединяющих его вершины) и определения, будет ли «освещено» очередное ребро полигона, если поместить в координаты точки источник света:
Цитата:
Прежде всего, заметим, что понятие освещенности было определено неформально и при этом использовалось расположение точки относительно всего многоугольника. Желательно было бы, чтобы освещенность или неосвещенность ребра определялась только по точке и ребру. Это можно сделать для ориентированных ребер (ориентированного многоугольника) следующим образом: рассмотрим ориентированное ребро AB, новую точку T и ориентированную площадь треугольника ABT:

(ориентированная площадь треугольника считается как половина площади параллелограмма, натянутого на векторы TA и TB).

Легко видеть:
что если многоугольник ориентирован «против часовой стрелки», то ребро AB освещено из T тогда и только тогда, когда:

Заметим также, что при таком формальном определении понятия освещенности никакое ребро многоугольника не освещено ни из одной точки внутри или на границе многоугольника.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:18, 25-09-2011 | #4


Аватара для ferget

Разный


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

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


это 3D вариант
а в 2D

Цитата:
Предположим, что нам необходимо определить принадлежность точки а полигону р. Для этого из некоторой удаленной точки проведем прямую линию в точку а. На этом пути может встретиться нуль или несколько пересечений границы полигона: при первом пересечении мы входим внутрь полигона, при втором — выходим из него, при третьем пересечении снова входим внутрь и так до тех пор, пока не достигнем точки а. Таким образом каждое нечетное пересечение означает попадание внутрь полигона р, а каждое четное — выход из него. Если мы попадаем в точку а с нечетным числом пересечений границы полигона, то точка а лежит внутри полигона, а если получается четное число пересечений, то точка находится вне полигона р.

Отправлено: 15:07, 25-09-2011 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
BSOD и точки на экране FingerTrah Непонятные проблемы с Железом 6 25-11-2009 02:18
Прочее - Настройка точки доступа rydailo Сетевые технологии 2 26-10-2008 09:59
Доступ - исчезает принадлежность пользовтеляк группе "Пользователи удаленного рабочегео стола" ah-lamo Microsoft Windows NT/2000/2003 12 03-07-2008 18:13
Не удалось получить доступ или установить принадлежность процесса? GifuN Microsoft Windows NT/2000/2003 0 14-01-2008 14:03
две точки 2000AP+(a1+a2) и карта 650+ хочу репитер из точки Soft_warrior Microsoft Windows NT/2000/2003 0 03-05-2006 21:53




 
Переход