есть мысли по этому поводу? область задается набором точек (конечным) точки соединены либо гладкой кривой либо отрезками прямой что-то сразу не соображу как это сделать побыстрее 970261033__
если область выпуклая и ограничена ломаной (те выпуклый многоугольник), то всё просто. надо задаться направлением обхода границы, и убедиться что точка лежит справа (или слева, в зависимости от направления обхода) относительно прямых содержащих стороны этого многоугольника. А если многоугольник не выпуклый, то его можно представить как объединение выпуклых. Если же стороны криволинейные, то всё несколько хуже, но можно попытаться адаптировать этот способ и к криволинейным. Или проверять с погрешностью. Наверняка где-нибудь в инете даже валяется статейка на этот счёт.
Есть еще один метод. В зависмости от того как заданы и расположены границы области он может быть легче а может быть сложнее. Для сложных невыпуклых областей он вроде считается хорошо работающим. Суть в следующем - из точки пытаешься "выбраться" наружу - в бесконечность - проще всего по прямой параллельной одной из осей, например, бесконечно вправо. И считаешь при этом сколько раз пересек границу. Если четное число раз - значит ты был снаружи области, если нечетное - значит был внутри.
r90 OLS thanx r90 для многоугольника ваше предложение оптимально (я тоже думал об ориентации но склонялся к ориентированным площадям так как надо все же для кривых) но вот привязать эту методу к случаю кривых (Безье, порядок n-1) пока не могу. Идея с площадями медленна. Хотя наверное если быстро считать площади.. OLS интересное предложение, сэнкс правда, сложно определить было ли пересечение границы
правда, сложно определить было ли пересечение границы разве сложно для аналитически заданной кривой решить уравнение x=x0 или y=y0, где (x0,y0) - координаты твоей точки ?
OLS Не все йогурты одинаково полезны... Тоесть это... Далеко не все уравнения решаются аналитически. Да и численно тоже.
_DEN_ Если мне не изменяет память, кривые Безье - бесконечно дифференцируемы (по независимой переменной) и самонепересекаются.
OLS собственно уравнение решить не оч сложно. задачка вроде нахождения корней у полинома этак 5й-20й степени чем больше решаю эту задачу тем больше понимаю что наверное выбрал неверный метод :-( и кстати говоря, интересен случай некоторых гладких кривых с самопересечениями (тех что рисует GDI+ при исп-ии метода DrawClosedCurve) _DEN_ ценю ваше чувство юмора )
если интересно кому, задача связана вот с чем: делаю некую программу рисования замкнутых кривых на карте(обычный jpeg) по узлам. кривые можно "изгибать" drag'n'drop-ом а также заливать цветом с регулировкой прозрачности так вот, для уменьшения мерцания при отрисовке и повышения скорости надо перерисовывать не все кривые а только те, которые пересекаются с изменяемой в данный момент кривой
slow Это делается иначе. Когда ты изменяешь кривую, ты берешь рисунок без этой кривой для рисования используешь операцию Xor. Как только линия переместилась затираешь ее, просто рисуешь ее с операцией Xor на старом месте. И рисуем на новом месте. По окончанию операции манипуляции рисуешь линию окончательно.
slow зачем вручную ? просто ставишь стиль для Pen как что-то-там-XOR и рисуешь сначала по старым координатам а затем по новым.
Как OLS правильно предложил метод, но есть у него дополнение, когда прямая проходит через вершину, от которой оба ребра выходят в одну сторону от данной прямой! Например, прямая горизотальная, проходит через вершину, образуемую двумя рёбрами, находящимися ниже этой прямой!