Научная статья на тему 'Использование булевых функций для представления многоугольников'

Использование булевых функций для представления многоугольников Текст научной статьи по специальности «Математика»

CC BY
339
37
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОУГОЛЬНИК / БУЛЕВА ФУНКЦИЯ / ПРЕДИКАТ / POLYGON / BOOLEAN FUNCTION / PREDICATE

Аннотация научной статьи по математике, автор научной работы — Поттосин Юрий Васильевич, Шестаков Евгений Анатольевич

Рассматриваются задачи, связанные с определением положения точки на плоскости относительно области, ограниченной многоугольником. Для этого вводится не полностью определенная булева функция, аргументами которой являются предикаты, связанные со сторонами многоугольника. Положение точки определяется значением данной функции.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Using Boolean Function for Representation of Polygons

The problems related to determination of the position of a point on a plane concerning the field restricted by a polygon are considered. In connection with those problems an incompletely specified Boolean function is introduced whose arguments are predicates related to the sides of the polygon. The position of the point is determined by the value of the function

Текст научной работы на тему «Использование булевых функций для представления многоугольников»

ВЕСТНИК ТОМСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА

2008 Управление, вычислительная техника и информатика № 2(3)

УДК 519.7

Ю.В. Поттосин, Е.А. Шестаков

ИСПОЛЬЗОВАНИЕ БУЛЕВЫХ ФУНКЦИЙ ДЛЯ ПРЕДСТАВЛЕНИЯ МНОГОУГОЛЬНИКОВ

Рассматриваются задачи, связанные с определением положения точки на плоскости относительно области, ограниченной многоугольником. Для этого вводится не полностью определенная булева функция, аргументами которой являются предикаты, связанные со сторонами многоугольника. Положение точки определяется значением данной функции.

Ключевые слова: многоугольник, булева функция, предикат.

Для решения задач вычислительной геометрии успешно применяются аналитическая геометрия, векторная алгебра, теория матриц [1 - 4]. Цель настоящей работы состоит в том, чтобы показать, как посредством булевых функций можно задавать области плоскости, ограниченные многоугольниками. Такое представление дает возможность эффективно решать некоторые задачи вычислительной геометрии, связанные с многоугольниками. Традиционно аппарат булевых функций широко используется для решения разнообразных задач проектирования цифровых устройств, распознавания закономерностей, анализа надежности систем [5]. Данная работа является примером того, что область применения аппарата булевых функций не ограничивается перечисленными задачами.

1. Основные определения

Точки плоскости a и Ь, заданные соответственно координатами ^а, уа) и (^ъ, уь) в декартовой системе, где х и у - переменные, связанные соответственно с осью абсцисс OX и с осью ординат OY, совпадают, если xа = xь и уа = уь. Если хотя бы одно из этих равенств не выполняется, то точки считаются различными. Отрезком ab называется пара различных точек a и Ь плоскости, соединенных прямой линией. Точки плоскости, находящиеся на этой прямой, принадлежат данному отрезку. Точки a и Ь отрезка ab называются граничными. Рассмотрим различные точки плоскости a, Ь, c, d, ... , ^ m. Соединим эти точки отрезками ab, Ы, cd, ... , Аот, ma. Получим замкнутую ломанную, которую обозначим через L = abcd...km. Точки a, Ь, c, d, ... , ^ m называются вершинами ломаной L, а отрезки ab, bc, cd, ... , Ъш, ma - сторонами ломаной L. Две стороны ломаной L называются соседними, если одна из их граничных точек является общей. Общую граничную точку соседних сторон назовем точкой соединения.

Два отрезка пересекаются, если существует хотя бы одна точка плоскости, принадлежащая каждому из них. Если такая точка отсутствует, то отрезки не пересекаются.

Замкнутая ломаная L является непересекающейся, если любая точка, общая для двух ее сторон, является граничной для этих и только для этих сторон.

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

Ломаная L делит плоскость на две части. Одна часть содержит точки плоскости, находящиеся внутри ломаной L, другая - точки плоскости, находящиеся вне L. Под многоугольником M будем понимать часть плоскости, находящуюся внутри замкнутой ломаной L. Сторону такой ломаной L будем называть стороной многоугольника M. Многоугольник, очевидно, не может иметь менее трех сторон.

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

Под булевой функцией f(x1, x2, ... , xn), зависящей от n булевых аргументов, понимается отображение f : {0, 1}n ^ {0, 1}. Введем векторную переменную х = (xb x2, ... , xn), тогда булеву функцию f(x1, x2, ... , xn) можно рассматривать как функцию от векторного аргумента fx). Под значением х* векторной переменной x будем понимать булев вектор (xi*, x2*, ... , xn*), где либо x;* = 0, либо x* = 1 (i = 1, 2, ... , n).

2. Многоугольник и деление плоскости на выпуклые подобласти

Обозначим через Pab прямую линию, проходящую через отрезок ab, а также уравнение этой прямой. Рассмотрим некоторую точку плоскости с, заданную координатами (xc, yC). Подставив координаты точки c в уравнение прямой Pab, получим число Pab(e).

Прямая Pab делит плоскость на две части: Pab+ и Pab-. Точка плоскости c принадлежит области Pab+, если число Pab(e) является положительным. Если это число является отрицательным, то точка c принадлежит области Pab-. Если число P^,^) равно нулю, то точка c принадлежит прямой Pab. Обычно считается, что прямая Pab делит плоскость на две части. В одну из них входит область Pab+, а также точки, принадлежащие Pab, в другую часть - область Pab-. Точка c принадлежит первой из этих частей, если и только если Pab(e) > 0. В противном случае точка c принадлежит второй части. Обозначим эти части плоскости соответственно через Pabr и Pab<. Иногда удобнее считать, что прямая Pab делит плоскость на части Pabs и Pab>. В этом случае точка c принадлежит Pabs, если Pab(e) < 0, и точка c принадлежит Pabb, если Pab(¿) > 0.

Пусть многоугольник M ограничен ломаной L. Проведем через каждую сторону ij многоугольника M прямую P¡j. Эти прямые делят плоскость на конечное число областей.

Пример 1. Рассмотрим многоугольник M, приведенный на рис.1. Вершины a, b, c, d, e многоугольника M заданы соответственно координатами xa = 1, ya = 7; xb = 6, yb = 6; xc = 6, yc = 12; xd = 11, yd = 7; xe = 6, ye = 2. Многоугольник задается ломаной L, которая состоит из отрезков ab, bc, cd, de и ae.

Прямые, проведенные через стороны этого прямоугольника, на рис. 1 обозначены пунктирными линиями. Точки пересечения этих прямых помечены латинскими буквами. Эти прямые делят плоскость на 14 областей. Четыре из этих областей являются многоугольниками: L1 = abe, L2 = ebt, L3 = bcdt, R = drt. Остальные 10 областей ограничены ломаными и лучами, исходящими из концевых точек этих ломаных. Эти области помечены большими латинскими буквами: A, B, C, D,

E, F, G, H, S, T. Так, одна из таких областей, которая помечена на рис. 1 буквой A, ограничена отрезками ab, Ь^ а также лучами, исходящим из точек a и с и являющимися продолжениями отрезков ае и cd. Считаем, что точки, находящиеся на отрезках ломаной L, не принадлежат области A. Наоборот, точки, находящиеся на лучах, ограничивающих область A, принадлежат этой области. Область, помеченная на рис. 1 буквой E, ограничена только двумя лучами. Лучи исходят из точки г, проходят через прямые Pcd, Paъ и соответственно не содержат отрезки cd, ab. Точки, находящиеся на луче, проходящем через прямую Pcd, не принадлежат области E, а точки, находящиеся на луче, проходящем через прямую PaЪ, принадлежат области ^

Рис. 1. Многоугольник из примера 1

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

Рассмотрим некоторую область U, индуцированную многоугольником M. Выберем любую из ее сторон. Через эту сторону проходит прямая. Все точки области U находятся в одной из полуплоскостей, на которые эта прямая делит плоскость. Следовательно, все области, индуцированные многоугольником M, являются выпуклыми. При этом сам многоугольник M состоит из некоторого подмножества Li, L2, ..., Lv областей, индуцированных им. Эти области являются выпуклыми многоугольниками.

Пример 2. Многоугольник, приведенный в примере 1, состоит из трех индуцированных областей L1 = abe, L2 = ebt, L3 = bcdt.

3. Булева функция многоугольника

Рассмотрим некоторую прямую Pab. Свяжем с этой прямой и с определяющим ее отрезком ab предикат uab. Будем считать, что, если для некоторой точки с, заданной координатами (xc, yc), выполняется Pab(c) > 0, то uab(c) = 1. Если Pab(c) < 0, то uab(c) = 0. Таким образом, если точка c принадлежит области плоскости Pabr, то uab(c) = 1. Если точка c принадлежит области плоскости Pab<, то uab(c) = 0.

Если необходимо рассматривать полуплоскости РаЪ~ и РаЪ>, то предикат иаЪ будет таким, что иаЪ(с) = 1, если РаЪ(с) < 0, иначе иаЪ(с) = 0.

Рассмотрим многоугольник М. Пронумеруем его стороны и положим, что стороне у соответствует номер д = Щ(у). Прямой, проведенной через сторону ], поставим в соответствие предикат ич = щ. Выберем точку с, расположенную внутри многоугольника М, но не принадлежащую стороне у. Если число Ру(с) положительно, то предикат щ принимает значение 1 для любой точки плоскости t, удовлетворяющей неравенству Ру(г) > 0. Иначе ич = 0. Если число Ру(с) отрицательно, то и?= 1 для любой точки плоскости t, удовлетворяющей неравенству Ру(() < 0. Иначе иг= 0. Поставим всем сторонам многоугольника вышеуказанным способом предикаты {их, и2, ... , и„}. Зададим на множестве этих предикатов векторную переменную и = (их, и2, ... , ип). Для каждой точки г плоскости можно найти значение иг* предиката ич, где (1 < д < п). Следовательно, для точки г можно найти единственный булев вектор и*(г) = (и!*, и2*, ... , и„*).

Рассмотрим некоторую область V, индуцированную многоугольником М.

Утверждение 1. Для любых двух точек плоскости и г2, принадлежащих области V, выполняется равенство и*(гх) = и*(г2).

Доказательство. Рассмотрим прямую Ру, проходящую через сторону у многоугольника М. Этой прямой сопоставлен в соответствие предикат щ (д = Щ(у)). Точки и г2 принадлежат области V, поэтому обе эти точки находятся в одной из полуплоскостей, на которые делится плоскость прямой Ру. Следовательно, компоненты с номером д в векторах и*(гх) и и*(г2) равны. Это справедливо для любой грани многоугольника М, т. е. и*(гх) = и*(г2). Утверждение доказано.

Таким образом, всем точкам области V соответствует один и тот же булев вектор, который обозначим через и*(Ц).

Рассмотрим две различные области V и и2, индуцированные многоугольником М.

Утверждение 2. и*(и0 Ф и*(и2).

Доказательство. Пусть точка принадлежит области их, а точка г2 - области и2. Из способа построения индуцированных областей следует, что существует в многоугольнике М сторона у, такая, что точки плоскости и г2 принадлежат разным полуплоскостям, на которые делит прямая Ру плоскость. Положим, что этой прямой сопоставлен предикат ич. Тогда булевы вектора и*(их) и и*(и2) будут отличаться друг от друга по значению компоненты с номером д. Утверждение доказано.

Пример 3. Рассмотрим многоугольник М, представленный на рис. 1. Уравнения прямых, проходящих через эти отрезки, имеют следующий канонический вид: Раъ = х + 5у - 36 = 0; РЪс = х - 6 = 0; РС11 = х + у - 18 = 0;

Рае = х - у - 4 = 0; Рае = х + у - 8 = 0.

Отрезкам аЬ, Ьс, cd, de и ае припишем соответственно предикаты их, и2, и3, и4 и и5, значения которых определим следующим образом:

их = 1, если х + 5у - 36 < 0; и2 = 1, если х - 6 > 0; и3 = 1, если х + у - 18 < 0;

и4 = 1, если х - у - 4 < 0; и5 = 1, если х + у - 8 > 0.

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

На множестве введенных предикатов зададим векторную переменную и = (иь и2, и3, и4, и5). В табл. 1 приведены булевы векторы, соответствующие индуцированным областям рассматриваемого многоугольника.

Таблица 1

и = (и1, и2, и3, и4, и5)

Л и*1 = (0, 0, 1, 1, 1)

В и*2 = (0, 0, 0, 1, 1)

С и*3 = (0, 1, 0, 1, 1)

ь и*4 = (0, 1, 0, 0, 1)

Е и*5 = (1, 1, 0, 0, 1)

F и*6 = (1, 1, 1, 0, 1)

О и*7 = (1, 1, 1, 0, 0)

н и*8 = (1, 0, 1, 0, 0)

Б и*9 = (1, 0, 1, 1, 0)

Т и*10= (0, 0, 1, 1, 0)

¿1 и*11= (1, 0, 1, 1, 1)

¿2 и*12= (1, 1, 1, 1, 1)

¿3 и*13= (0, 1, 1, 1, 1)

К и*14= (0, 1, 1, 0, 1)

Таким образом, каждой области, индуцированной многоугольником М, однозначно соответствует булев вектор, однако не всякому булеву вектору соответствует некоторая индуцированная область. Это видно на примере многоугольника на рис. 1.

Пример 4. Многоугольник из рис. 1 индуцирует 14 областей, а булево пространство размерности 5 состоит из 25 = 32 векторов. Нетрудно определить остальные 18 векторов, для которых нет соответствующих индуцированных областей: {(0,0,0,0,0), (0,0,0,0,1), (0,0,0,1,0), (0,0,1,0,0), (0,0,1,0,1), (0,1,0,0,0), (0,1,0,1,0), (0,1,1,0,0), (0,1,1,1,0), (1,0,0,0,0), (1,0,0,0,1), (1,0,0,1,0), (1,0,0,1,1), (1,0,1,0,1), (1,1,0,0,0), (1,1,0,1,0), (1,1,0,1,1), (1,1,1,1,0)}.

Подмножество значений векторной переменной и, которым сопоставлены области, индуцированные многоугольником М, обозначим через Подмножество значений векторной переменной и, которым не поставлены во взаимное соответствие области, индуцированные многоугольником М, обозначим через <2М и назовем областью запрета.

Пусть многоугольник М имеет п сторон. Для каждой стороны і] многоугольника М определен предикат ыд, где д = Ы(у). Из этих предикатов составлена векторная переменная и = (щ, и2, ... , ип). Пусть также для многоугольника М найдены все области Рь Р2, ... , Рт, индуцированные им. Из множества полученных областей Р = {Рь Р2, . , Рт} выделено подмножество областей L = {Ll, L2, . , 1„}, которые находятся внутри многоугольника М. Для всякой области из множества Р найдем соответствующий ей булев вектор, т. е. сформируем множество 2М и по этому множеству построим область запрета QM. Теперь многоугольнику М можно приписать частичную булеву функцию/М(и) такую, что/М(и*) = 1, если булев вектор и* принадлежит множеству 2М и поставлен в соответствие одному из многоугольников подмножества L; /м(и*) = 0, если и* є ХМ и булев вектор и* поставлен в соответствие одному из многоугольников подмножества Р \ L; и значение /М(и*) не определено, если и* є QM. Эта неопределенность обусловлена тем, что никакая точка не может попасть за пределы бесконечной плоскости. Следовательно, при данной интерпретации переменная и никогда не примет значение из множества QM, и на этом множестве функцию/М(и) можно доопределить как угодно.

Если при решении некоторой задачи на многоугольнике требуется вычислять значения функции /м(и), то естественно иметь такую форму представления этой функции, чтобы эти вычисления имели наименьшую сложность. В частности, такой формой может быть минимальная дизъюнктивная нормальная форма (ДНФ). Чтобы ее получить, достаточно воспользоваться любым известным методом минимизации частичной булевой функции в классе ДНФ [5].

Пример 5. Для многоугольника М на рис. 1 в табл. 1 приведены значения векторной переменной и, составляющие множество 2М. Частичная булева функция /м(и) может быть задана двумя матрицами [5]. Строки одной из них, и0, представляют значения вектора и, где /м(и) = 0, строки другой, VI, - значения вектора и, где /м(и) = 1. Для рассматриваемого многоугольника имеем

и =

и1 ^2 и4

^0011 о о о о

и5

о о о о

о о

о о о 1

1 1 о о о

о о о о

их =

м1 и2 и3 и4 и

"1 0 1 1 1

1 1 1 1 1

0 1 1 1 1

Для значений аргумента и из множества <2М (см. пример 4) значения булевой функции /м(и) не определены. В результате минимизации получим следующую минимальную ДНФ:/Ми) = щи4щ V и2и3и4.

Частичную булеву функцию /м(и), заданную вышеописанным образом для многоугольника М, и всякое ее доопределение в дальнейшем будем называть булевой функцией многоугольника М.

4. Другой способ нахождения булевой функции многоугольника

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

Пусть дан многоугольник М. Необходимо найти его булеву функцию.

Положим, что многоугольник М имеет п сторон. Найдем для каждой стороны у этого многоугольника предикат ич, где д = Щ(у). Напомним, что с помощью функции N задается нумерация сторон данного многоугольника. Будем считать, что точки плоскости, расположенные на сторонах многоугольника М, принадлежат этому многоугольнику.

Выполним разметку сторон прямоугольника М. Сторона у многоугольника М помечается, если все его вершины находятся или в полуплоскости Ру или в полуплоскости Р,Ут, иначе сторона у не помечается. Очевидно, что, если все стороны многоугольника М окажутся помеченными, то такой многоугольник является выпуклым. Поскольку выпуклый многоугольник состоит из одной индуцированной области, функция /Ми) имеет значение 1 только на одном наборе значений предикатов, т. е /м(и) = и! л и2 л ... л ип = ихи2...и„.

Если хотя бы одна из сторон многоугольника М окажется непомеченной, то ДНФ функции/м(и) состоит более чем из одной конъюнкции.

Положим, что сторона у многоугольника М, которой приписан предикат ич, не помечена. Без потери общности положим, что сторона у принадлежит полуплоскости Ру~. Прямая Ру делит многоугольник М на два или большее число многоугольников. Часть сторон этих многоугольников, которые не пересекает прямая Ру, совпадает со сторонами многоугольника М. Если сторона многоугольника М лишь соприкасается с прямой Ру одной из своих граничных точек или полностью лежит на Ру, то она также является стороной одного из полученных многоугольников. При этом разметка этих сторон не меняется. Если некоторая сторона ер многоугольника М имеет с прямой Ру единственную точку пересечения а, которая не совпадает с точками е ир, то разделим эту сторону на две следующим образом.

Пусть точка е принадлежит полуплоскости Ру~, а точка р - полуплоскости Ру<. Разделим сторону ер на стороны еа и ар. При этом будем считать, что точка а не принадлежит стороне ар. Если точка е принадлежит полуплоскости Ру<, а точка р - полуплоскости Ру~, то будем считать, что точка а не принадлежит стороне еа. Предикат, приписанный стороне ер, приписывается также сторонам еа и ар. Если сторона ер помечена, то будем считать, что стороны еа и ар также помечены.

Остальные стороны этих многоугольников получаются в результате рассечения многоугольника М прямой Ру. Эти стороны лежат на прямой Ру. Они получаются следующим образом.

Найдем точки пересечения прямой Ру с многоугольником М. К точкам пересечения относятся:

- граничные точки сторон многоугольника М, если они лежат на прямой Ру;

- точки пересечения сторон многоугольника М с прямой Ру.

Упорядочим найденные точки пересечения по их проекциям на оси ОХ и ОУ. В этом случае соседние точки пересечения будут задавать отрезки прямой Ру. Из этих отрезков будем рассматривать лишь те, которые находятся внутри многоугольника М и не являются его сторонами. Полученные таким образом отрезки также являются сторонами многоугольников, полученных рассечением многоугольника М прямой Ру. Рассмотрим одну из этих сторон рхр2. Эта сторона является общей для двух многоугольников, полученных в результате рассечения. Обозначим их Ух и У2 и отнесем Ух к полуплоскости Ру~, а У2 \ рхр2 - к Ру<. Сторона рхр2 является помеченной как в данном случае, так и в случае, если бы она была отнесена к многоугольнику У2, поскольку оба этих многоугольника лежат в полуплоскостях, задаваемых прямой Ру. Припишем стороне рхр2 и многоугольнику У1 предикат ид, а многоугольнику У2, - предикат ич. Таким образом, находим все стороны многоугольников, полученных рассечением многоугольника М прямой Ру.

Выполним разметку сторон полученных многоугольников. Если хотя бы у одного из этих многоугольников некоторая сторона окажется не помеченной, то выполним рассечение этого многоугольника по прямой, проходящей по этой стороне. Будем выполнять подобные рассечения до тех пор, пока исходный многоугольник не окажется разбитым на совокупность выпуклых многоугольников, все стороны которых будут помечены. Булева функция каждого из этих многоугольников задается одной элементарной конъюнкцией. Дизъюнкция всех полученных данным образом конъюнкций задает булеву функцию/м(и) многоугольника М.

Пример 6. На рис. 2 приведен многоугольник М, заданный контуром Ь, состоящим из отрезков ^1^2, ^2^3, dзd4, $4$5, $5$б, ^6^7, ^7^8, $8$9, $^1, у, у$ю, d\od\\,

d\\d\2, $12$13, $13$14, $14$х. В этом многоугольнике помечены три стороны: $х$2,

$2$3, и $3$4. Остальные стороны не могут быть помечены. Не является помеченной и сторона у. Прямая Ру, проходящая через сторону у, делит многоугольник М на четыре многоугольника. Все стороны многоугольника М за исключением сторон $х$2, $3$4, $7$8 и $13$14 являются сторонами этих четырех многоугольников. Прямая Ру делит стороны $х$2, $3$4, $7$8 и $13$14 многоугольника М на стороны $хН4, Н4$2, $3Нх, Нх$4, $7Н2, Н2$8, $13Н3 и Н3$14, которые также являются сторонами полученных многоугольников. Так как стороны $х$2, $2$3 и $3$4 многоугольника М помечены, то соответственно помеченными будут и стороны $хН4, Н4$2, $3Нх, Нх$4. На прямой Ру, проходящей через прямоугольник М, расположены отрезки Нх$6, $6Н2, Н2г, у', у$11, $Х1Н3 и Н3Н4. Те из этих отрезков, которые являются сторонами многоугольника М, не рассматриваются. К таким отрезкам в данном случае относится сторона у. Из оставшихся отрезков сторонами рассматриваемых четырех многоугольников будут те, которые лежат внутри многоугольника М. Это стороны Нх$6, $6Н2 и Н3Н4, которые также будут помечены. Таким образом, найдены все стороны многоугольников, полученных рассечением многоугольника М прямой Ру. Эти многоугольники задаются контурами Ьх = $4$5$6Нх, Ь2 = $6$7Н2, Ь3 = $хН4Н3$14 и Ь4 = Н4$2$3Н1$6Н2$8$9гу$1о$11$12$13Н3. Все точки плоскости, расположенные на отрезках контура Ь4, принадлежат многоугольнику, задаваемому этим контуром. Точки плоскости, расположенные на отрезках Нх$6, $6Н2 и Н3Н4, не принадлежат многоугольникам, задаваемым соответственно контурами Ьх, Ь2 и Ь3. Стороны Нх$6, $6Н2 и Н3Н4 рассматриваемых многоугольников помечаются. В многоугольниках, задаваемых контурами Ьх, Ь2 и Ь3, этим сторонам приписывается предикат иг В многоугольнике, задаваемом контуром Ь4, этим отрезкам приписывается предикат ич.

Пример 7. Рассмотрим многоугольник М на рис. 1. Согласно правилу пометки, стороны с$, $е и ае этого многоугольника должны быть помечены, а стороны аЬ и Ьс не помечаются. Сторонам с$, $е и ае приписываются соответственно предикаты и3, и4 и и5. Рассечем многоугольник М прямой РаЬ. В этом случае многоугольник М распадется на два многоугольника М1 и М2, задаваемых соответственно контурами Ьх = аЫе, и Ь2 = Ьс$г. Точки плоскости, лежащие на стороне Ы, отнесем

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

к многоугольнику Мх и припишем им предикат их. Многоугольнику М2 припишем тот же предикат с отрицанием. Поскольку оба многоугольника Мх и М2 выпуклые, все их стороны могут быть помечены. Следовательно, /м(и) = их и4 и5 V их и2 и3 и4. Заметим, что полученная булева функция является не частичной, а полностью определенной.

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

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

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

Пусть для некоторого многоугольника М, заданного контуром Ь, найдена его булева функция/м{и), где и = (их, и2, ... , ип). Контур Ь состоит из п сторон, которым соответственно приписаны предикаты их, и2, ... , ип. Необходимо для заданной своими координатами точки плоскости р установить, находится эта точка или нет внутри многоугольника М.

Для решения этой задачи найдем для точки р булев вектор и*(р) = (их*, и2*, ... , ип*). Если/м(и*(р)) = 1, то точкар принадлежит многоугольнику М, а если /м(и*(р)) = 0, то она ему не принадлежит.

Пример 8. Рассмотрим многоугольник М на рис. 1. Предикаты, найденные для сторон этого многоугольника, приведены в примере 3. В примере 4 найдена булева функция/м(и) этого многоугольника. Пусть точка р задана координатами хр = 5 и ур = 4. Найдем и*(р) = (1,0,1,1,1). Нетрудно проверить, что /м(и*(р)) = 1. Следовательно, данная точка принадлежит многоугольнику М. Положим, что точка р' задана координатами хр< = 4, ур, = 3. Найдем и*(рг) = (1,0,1,1,0) и /м(и*(р’)) = 0. Точка р' не принадлежит многоугольнику М.

Рассмотрим более сложную задачу, которая формулируется следующим образом.

Пусть для некоторого многоугольника М, заданного контуром Ь, найдена его булева функция/м(и), где и = (их, и2, ... , ип). Необходимо для заданного отрезка у установить, находится он внутри многоугольника М или нет.

Вначале найдем решение этой задачи для случая, когда ни одна прямая, проходящая через сторону многоугольника М, не пересекается с отрезком у'. Таким образом, все точки отрезка у' лежат в одной из полуплоскостей, образованной прямой, проходящей через некоторую сторону многоугольника М. Это означает, что для любых двух точек V и у', лежащих на отрезке у, выполняется условие /м(и*(1г)) = /ы(и*аг)). Следовательно, для отрезка у' так же, как и для точки плоскости, можно найти булев вектор и*(у) = (их*, и2*, ... , ип*). В этом случае, если /м(и*(у)) = 1, то отрезок у' принадлежит многоугольнику М. Если же /м(и*(у)) = 0, то отрезок у не принадлежит многоугольнику М.

Пример 9. Вновь обратимся к многоугольнику М на рис. 1. Пусть дан отрезок у, где точка I задана координатами Xi = 7, у = 10, а точка у - координатами Ху = 9, Уу = 7. Проверим, включен или нет этот отрезок в многоугольник М. Получим и*(у) = (0,1,1,1,1). Булева функция/м(и), приведенная в примере 7, на этом наборе принимает значение 1. Следовательно, отрезок у принадлежит многоугольнику М.

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

чем точки пересечения не совпадают с граничными точками этого отрезка. Выполним лексикографическое упорядочивание пар координат этих точек, а сами точки обозначим через у1, у2, у3, ... , ук. Тогда отрезок у можно разбить на отрезки /VI, У1У2, У2У3, ... , у к/. Каждый из этих отрезков не пересекается с прямыми, проходящими через стороны многоугольника М. Для каждого из этих отрезков, как было показано выше, легко определить, находится он или нет внутри многоугольника М. Если все эти отрезки находятся внутри многоугольника М, то и сам отрезок принадлежит этому многоугольнику. Если хотя бы один из отрезков /у1, У1У2, у2у3, ... , уу не принадлежит многоугольнику М, то и весь отрезок у' не принадлежит ему.

Пример 10. Рассмотрим многоугольник М на рис. 1. Пусть дан отрезок у, где точка / задана координатами х1 = 3, у1 = 6, а точка у - координатами Ху = 7, у = 10. Проверим: включен или нет этот отрезок в многоугольник М. Прямая с уравнением х + 5у - 36 = 0, проходящая через сторону аЬ многоугольника М (см. пример 2), пересекается с отрезком у в точке у1 с координатами х1 = 3,5, у1 = 6,5. Прямая с уравнением х - 6 = 0, проходящая через сторону Ьс многоугольника М, пересекается с отрезком у в точке у2 с координатами х2 = 6, у2 = 9. Другие прямые, проходящие через стороны этого многоугольника, не пересекаются с данным отрезком. Найденные точки пересечения делят отрезок у на отрезки /у1, у1у2, уу. Причем граничные точки отрезка у1у2 не принадлежат этому отрезку. Каждый из этих отрезков не пересекается с прямыми, проходящими через стороны рассматриваемого многоугольника М. Найдем и*(/у1) = (1,0,1,1,1), и*(у1у2) = (0,0,1,1,1), и*(уу) = (0,1,1,1,1). Легко проверить, что/М(и*(1у{)) = Ми*(у2)) = 1, М.и*(у1у2)) = 0. Отрезок у1у2 не принадлежит многоугольнику М, следовательно, отрезок у не принадлежит многоугольнику М.

Заключение

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

ЛИТЕРАТУРА

1. Ласло М. Вычислительная геометрия и компьютерная графика на С++. М.: БИНОМ, 1997. 304 с.

2. Препарата Ф., Шеймос М. Вычислительная геометрия: Введение. М.: Мир, 1989. 478 с.

3. Фейнберг В.З. Геометрические задачи машинной графики больших интегральных схем. М.: Радио и связь, 1987. 178 с.

4. Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики. СПб.: БКХ-Петербург, 2005. 576 с.

5. Закревский А.Д., Поттосин Ю.В., Черемисинова Л.Д. Логические основы проектирования дискретных устройств. М.: Физматлит, 2007. 592 с.

Статья представлена кафедрой программирования факультета прикладной математики и кибернетики Томского государственного университета и оргкомитетом 7 Российской конференцией с международным участием «Новые информационные технологии в исследовании сложных структур», поступила в научную редакцию 30 мая 2008 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.