Полигон-оболочка

Последнее сообщение
AlNikS 878 13
Сен 13

В общем, такая штука. Есть множество точек типа (X,Y,0). Как создать в Petrel вокруг этого множества полигон-оболочку заданного радиуса R?

Либо так, есть произвольный полигон, весьма кривой и невыпуклый. Как создать вокруг него невыпуклую оболочку радиуса R?

westa 152 12
Сен 13 #1

Знаю, как создать полигон фиксированного радиуса. Это то?

FullChaos 875 14
Сен 13 #2

1. изолайн, полуавтомат - минимум редакции
2. городить достаточно сложный огород в экселе
3. в петрле руками )

AlNikS 878 13
Сен 13 #3

Похоже, придется по 3-му варианту...

volvlad 2241 15
Сен 13 #4

А зачем нужна НЕвыпуклая оболочка (может все-таки выпуклая)? и что понимается под радиусом оболочки?

AGA 758 9
Сен 13 #5

лушче расскажите зачем вообще это? =))

volvlad 2241 15
Сен 13 #6

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

AlNikS 878 13
Сен 13 #7

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

Пусть есть множество X. Определим "Невыпуклую оболочку множества X радиуса R" как совокупность точек y, таких что существует какая-то x из X, такая что расстояние от x до y меньше либо равно R. Определим "Выпуклую оболочку множества X радиуса R" как "наименьшее" выпуклое множество, содержащее невыпуклую оболочку.

Почему я уточнил что не выпуклую, так это потому что выпуклую Petrel умеет создавать через Create Boundary.

Откуда взялась "постановка задачи". Есть целевые регионы-полигоны, выделенные по ряду критериев (в основном запасы), куда перспективно зарезать боковой ствол. Задача найти скважины-кандидаты, соответственно их текущие забои должны быть не дальше, чем расстояние R (определяется полуинтуитивно, зависит от предполагаемого станка). Надо построить полигоны, чтобы отфильтровать возможные скважины-кандидаты, прежде чем перебирать их вручную, потому что ФОНД ОГРОМНЫЙ.

RomanK. 2164 13
Сен 13 #8

Увеличь целевой регион-полигон на радиус поиска и наложи на скважины (?).
Пока писал вроде понял.

Определи центр полигона (среднее Х, среднее Y), расчитай дистанцию от центра до произвольной (каждой) точки полигона, увеличь дистанцию на расстояние R и расчитай координату новой точки (уравнение линии)

Про это?

Или так. Через серию аффинных преобразований.
Перемести центр полигона в ноль (X - Xc, Y - Yc)
Умножь новую координату на скалируйщий фактор (X * f, Y * f)
И верни назад (X + Xc, Y + Yc)

Посчитай площадь исходного полигона и нового. Посчитай условный радиус R = S / (3.1415)**0.5 и подбирай итеративно масштабируйщий фактор так, чтобы новый радиус был больше на заданую величину.

Мне кажется я решил какую-то свою выдуманную задачу.
 

di. 163 10
Сен 13 #9

Для решения таких задач и предназначен SDK для Petrel (Ocean называется). Люди что только не делают с ним...

RomanK. 2164 13
Сен 13 #10

Например, не используют

AlNikS 878 13
Сен 13 #11

К сожалению, это не аффинное преобразование (и не "увеличение"). Например, полигон в форме Pacman-а с размером рта меньше R должен перейти в круг.

AlNikS 878 13
Сен 13 #12

di. пишет:
Для решения таких задач и предназначен SDK для Petrel (Ocean называется). Люди что только не делают с ним...

Если знаете готовое решение, welcome. Если нет, то я скорее руками все нарисую, чем буду разбираться в SDK, у меня конкретная задача не терпящая отлагательств.

RomanK. 2164 13
Сен 13 #13

Так тебе не деформированный круг нужен? Нарисуй в паинте, что надо.
PacMan - это найти центр полигона, максимальное расстояние от центра до точки полигона есть радиус - нарисовать окружность

volvlad 2241 15
Сен 13 #14

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

AlNikS 878 13
Сен 13 #15

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

В общем, хочу автоматизировать построение таких вот полигонов:
 

RomanK. 2164 13
Сен 13 #16

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

AlNikS 878 13
Сен 13 #17

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

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

RomanK. 2164 13
Сен 13 #18

Давай с другой стороны - расчитай расстояние от забоя скважины до каждой точки каждого полигона? Кто выполняет условие тот и папа

AlNikS 878 13
Сен 13 #19

Пойдет. Как в Petrel посчитать расстояние от точки до полигона?

Lyric 307 14
Сен 13 #20

Если надо просто посчитать расстояние от точки до полигона то я так обычно делаю:

Делается Refine полигонам с шагом метров в 10, выгрузаю их текстом (IRAP classic lines).
Потом в экселе посчитай расстояние от забоев до всех точек полигонов. Либо макросом либо обычной формулой.
Решение в лоб, поэтому может долго считаться, но результат будет )

AGA 758 9
Сен 13 #21

Wasteland Rat пишет:
Пойдет. Как в Petrel посчитать расстояние от точки до полигона?

Попробуй Geometrical Modeling=>Distance to object вроде это оно.

AlNikS 878 13
Сен 13 #22

Lyric пишет:
Если надо просто посчитать расстояние от точки до полигона то я так обычно делаю:

Делается Refine полигонам с шагом метров в 10, выгрузаю их текстом (IRAP classic lines).
Потом в экселе посчитай расстояние от забоев до всех точек полигонов. Либо макросом либо обычной формулой.
Решение в лоб, поэтому может долго считаться, но результат будет )

А для чего refine?

volvlad 2241 15
Сен 13 #23

В общем ладно с математикой надо заканчивать))
Вот тебе простое и элегантное решение, для создания полигонов. В Петреле с помощью create surface edge строишь полигон оконтуривающий карту остаточных толщин (обрезанную по минимальному значению). Затем делаешь split, и вуаля, есть куча полигонов. Единственное, что это не будет полигон с нужным радиусом)

karakurt2 94 11
Сен 13 #24

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

Unknown 1652 15
Сен 13 #25

Завязывайте с математикой, объясни по-человечески:
тебе надо сделать полигон, оконтуривающий грид? при это полигон больше грида на некоторое постоянное расстояние? или тебе надо сделать полигоны постоянного радиуса, вокруг разреженного набора точек (скважин)?

Lyric 307 14
Сен 13 #26

Wasteland Rat пишет:
Lyric пишет:
Если надо просто посчитать расстояние от точки до полигона то я так обычно делаю:

Делается Refine полигонам с шагом метров в 10, выгрузаю их текстом (IRAP classic lines).
Потом в экселе посчитай расстояние от забоев до всех точек полигонов. Либо макросом либо обычной формулой.
Решение в лоб, поэтому может долго считаться, но результат будет )

А для чего refine?


чтобы быть уверенным в том что у тебя достаточно точек в полигоне для расчета расстояния. Считай что ты полигон аппроксимируешь точками. И чем больше точек будет описывать твой полигон, тем точнее будет расчет расстояния до него. 

AlNikS 878 13
Сен 13 #27

Unknown пишет:
Завязывайте с математикой, объясни по-человечески:
тебе надо сделать полигон, оконтуривающий грид? при это полигон больше грида на некоторое постоянное расстояние? или тебе надо сделать полигоны постоянного радиуса, вокруг разреженного набора точек (скважин)?

Вообще первое, но второе тоже сводится к первому.
С помощью Create Surface Edge в принципе, получилось почти то что надо, за исключением глюков:

AGA 758 9
Сен 13 #28

Unknown пишет:
Завязывайте с математикой, объясни по-человечески:
тебе надо сделать полигон, оконтуривающий грид? при это полигон больше грида на некоторое постоянное расстояние? или тебе надо сделать полигоны постоянного радиуса, вокруг разреженного набора точек (скважин)?

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

Go to top