|
|
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
да - но при наличии 20000 точек перебирать все возможные комбинации из трех, будет происходить долго. Тем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 19:21:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :) Хотя есть мысль как это исправить: 1) перебором найти две самые далеко отстоящие друг от друга точки. Это даст нам окружность с центром посередине между этими точками. 2) перебором искать третью точку, которая дает минимальный радиус описанной окружности треугольника. 3) если третья точка получилась в пределах окружности из пункта 1, то результатом будет окружность из пункта 1. Иначе - окружность из пункта 2. Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 19:58:43 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 20:30:09 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftmiksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз. интерестно. нужно попробовать теперь это все в кучу собрать. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 20:55:21 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :) Хотя есть мысль как это исправить: 1) перебором найти две самые далеко отстоящие друг от друга точки. Это даст нам окружность с центром посередине между этими точками. 2) перебором искать третью точку, которая дает минимальный радиус описанной окружности треугольника. 3) если третья точка получилась в пределах окружности из пункта 1, то результатом будет окружность из пункта 1. Иначе - окружность из пункта 2. Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1. По ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 22:04:42 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarПо ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки?Я полагал, что да. Но теперь, после вашего вопроса, задумался о контрпримере, и, кажется, нашел его :( И кстати, и насчет перебора троек точек рецепт тоже был неверным :( Тройки точек надо перебирать таким образом, чтобы радиус окружности был минимальным, но не было остальных точек за ее пределами. Но это дает очень большой объем вычислений. Если устроит приблизительное решение, то можно подумать над итеративным способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 22:58:06 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
авторПроверим решение для (1,0) (0,1) и (2,1) - тогда центр должен иметь координаты (1,1) x1 = 1, x2 = 0, x3 = 2, y1 = 0 , y2 = 1, y3 = 1 D = (0-1)(1-0) - (2-1)(1-0) = -1 - 1 = -2 x2^2 + y2^2 = 1, x1^2 + y1^2 = 1, x3^2+y3^2 = 5 2Dx0 = (1-0) - 5 = -4 2Dy0 = -1 + 5(0-1) + 2 = -4 x0 = 1, y0 =1 Таким образом имеем формулы для определения (x0,y0) по трем точкам. Подскажите а каким "таким образом" Как получилось что x0 = 1, y0 =1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:07:29 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
мне нужно решить эту задачу с одной целью - автоматизировать вписывание картинок в круг ) приблизительное решение может и подойдет - вопрос только в том - на сколько оно приблизительное. И еще вопрос - может получится разобрать алгоритм, который приведен на предыдущей странице. В принципе я в нем только пару строк не понимаю, напрмер dot(u,v) ((u).x * (v).x + (u).y * (v).y) - что здесь находится? тем более что сюда посылается один параметр для u и v... я уже вторые сутки не сплю практически - перелазил весь нет исписал тетрадь, но блин - пока ничего не выходид... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:25:40 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, не всегда задачу нужно решать абсолютно точно. На практике зачастую точного решения никто не ищет (транспортная задча). Хватает приближённого. Тебе надо вписывать картинку в круг? Отлично. Как задана картинка? Выпуклый многоугольник? Матрица пикселов? Или еще хр.зн. какое аналитическое описание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:47:34 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
исходник - некая картинка (думаю не больше 120x120 пикселей) в формате png, которая имеет прозрачные участки. одной программкой я записываю в текстовый файл параметры каждого пикселя Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. когда получаю чентр описанного круга (эх...) расширяю холст, сдвигаю картинку и вуаля (это уже работает) ..... посему чем меньше будет охватывающий круг - тем крупнее будет картинка - что есть - главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:06:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarкрупнее будет картинка - что есть - главное.Что-то я не пойму, а зачем тут вообще круг? В результате же картинка получится прямоугольная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:12:48 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft, естественно. в зависимости от радиуса описанного груга - изменится размер холста, а в зависимости от разницы центров первоначальной картинки и описанного круга - задается смещение для первоначальной картинки на новом холсте относительно его центра. такой способ уже проверил (написал код)- и он работает - если конечно можно описать окружность по двум точкам, а так можно - далеко не всегда сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:19:45 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, Так я и не пойму, зачем вам тут круг... Насколько я понял задачу, достаточно взять минимальные и максимальные координаты непрозрачных точек и это даст обрамляющий прямоугольник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:27:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft, ключевое слово - "пряоугольник", а мне нужно вписать в круг. картинка после тримминга (обрезка до первых непрозрачных пикселей со всех сторон) не идеально вписывается по углам. - по сути это тоже самое что прямоугольник в круг вписывать. Но у меня многоугольник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:42:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, можете показать пример исходной и конечной картинки? Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали... Если так уж нужен именно круг, то переборный вариант тут, возможно, будет не так уж и плох. Ведь в каждой вертикали и каждой горизонтали можно взять только крайние точки, промежуточные не нужны. А еще можно по каждой стороне поискать пики и выкинуть все точки между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:49:16 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezer, твоя задача разбита на 2 независимых этапа 1) Построение выпуклой оболочки вокруг непрозрачных пикселов картинки. http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0 2) Построение описанной окружности вокруг выпуклого многоугольника. http://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C C (1) пунктом всё предельно просто, а со (2) надо подумать. Формульные решения существуют только для треугольников и выпуклых четырёхугольников. Возможно придётся комбинировать несколько методов. Кстати тот факт что сама окружность имеет дискретный радиус и положение упрощает задачу до комбинаторно-генетического метода. Достаточно её приблизить "хоть как нибудь" к описаной окрестности а потом можно добить её каким-нибудь "поиском минимума" или каким-нибудь ГА в 100-200 итераций до точного решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:01:10 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezar, можете показать пример исходной и конечной картинки? Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали... Если так уж нужен именно круг, то переборный вариант тут, возможно, будет не так уж и плох. Ведь в каждой вертикали и каждой горизонтали можно взять только крайние точки, промежуточные не нужны. А еще можно по каждой стороне поискать пики и выкинуть все точки между ними. про пики согласен - но это уже оптимизация, а оптимизировать пока нечего (( пример не знаю как выкладывать картинки - поэтому самый простой вариант. у меня есть рисунок в виде кольца, внутренний диаметр которого я знаю есть вторая картинка - колесо ("идеальный" вариант) на выходе я должен получить кольцо внутри которого (точнее - в пределах внутреннего известного радиуса) расположена картинка колеса. А так как колесо круглое - то оно замостит всю внутреннюю часть кольца... собственно задача - вписать некий многоугольник в круг (или описать круг вокруг многоугольника). гдето так ) ----------------- прикрепил 1.png пример исходной картинки ex.png - картинка которая получилось в результате работы уже работающей программы вот такое нужно проделать с большим количеством разнообразных картинок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:03:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, к сожалению я не матиматик, а... вообщето водитель ), поэтому все эти выпуклости никогда не пойму) из того что я за 2 дня начитал я понял что мне нужно уйти от фигур и просто описать набор точек - это проще всего (наверное) а самое обидное что я нашел три алгоритма как это делается но все они на С++ что для меня темный лес и кучу непонятных теоретических описаний. я уже думал и про минимуму и максимумы рисунка и про всякого такого рода вещи - кучу всего изрисовал - но если и находил решение - то оно было рабочим дтолько для нескольких случаев... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:07:37 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, картинку с треугольником видел. и как оказалось, - проблемно было найти вменяемую формулу для описания круга по трем точкам... щас остановился на проверке наборов троеточий - но пока, чтото не очень... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:09:36 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Подумал, порисовал различные частные случаи и пришёл к следующему: Поиск описанной окружности вокруг n-вершинного многоугольника M(n) путём комбинирования треугольников из n по 3 заведёт в тупик. Мы найдем неверное решение которое не будет оптимальным. Представьте себе достаточно вытянутый многоугольник M1 (эдакий плоский блин из множества точек). Не решая численно я априори вижу, что диаметр описанной окружности O1 совпадает с поперечником M1. Поперечник визуально легко найти, если взять две самые отдалённые друг от друга точки. Другие точки можно смело игнорировать. Они не влияют на положение и радиус O1. Если решать это комбинируя треугольники то мы найдем заведомо окружность O2 гораздо большего радиуса. Наша ошибка в рассуждениях - слишком суровое требование "касания". Наша искомая окружность вовсе не обязана (хотя и может) касаться многоугольника тремя точками. Достаточно двух для моего пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 10:44:05 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут. Искать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:05:45 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я-ж говорю - вовсе не обязана касаться трех. Вот пример (картинка), когда математическое определение описанной окружности не подходит под практику данной задачи. На ней окружность неоптимальна. Почему поперечник искать проще? Ответ прост - меньше вычислений т.к. комбинируем 2 из N. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:47:54 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mayton, Видимо я чтото не понял. Что такое - "поперечник" для рисунка в виде сердца он где будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 12:00:57 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я не помню определение. Для окружности поперечник - это и есть диаметр. Для любой другой фигуры - это наиболее протяжённое расстояние от двух дальних точек. Пускай математики меня поправят если что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 12:02:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarmayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью. NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше. Во-вторых, предварительная проверка пар точек уменьшит среднее время решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:02:39 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36707125&tid=1343600]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 466ms |

| 0 / 0 |
