|
|
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarmayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью. NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше. Во-вторых, предварительная проверка пар точек уменьшит среднее время решения. естественно точки выпадают - такая окружность не есть ограничивающей. щас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки. Хотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:12:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Еще вопрос предположим что единственным решением задачи будет окружность построенная по двум точкам. Всегда эти точки буду самые удаленные друг от друга? Если нет - то можно пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:14:30 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую. NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:21:33 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarЕще вопрос предположим что единственным решением задачи будет окружность построенная по двум точкам. Всегда эти точки буду самые удаленные друг от друга?Да. Самый длинный отрезок, который целиком помещается в окружность - это ее диаметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:24:09 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую. NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее. хотелось сначало хоть както заставить работать алгоритм со звездой - да... не подумал.. щас алгоритм выглядит так (как вы говорили) ищутся две самые дальние точки перебором ищется третья точка, которая с первыми двумя составляет круг если в этот круг входят точки - хорошо - выбираем минимальный если такие три точки не нашлись - то наш круг описан возле первых двух самых удаленных точек ... пока тестирую результаты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 14:40:49 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
В вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 15:01:34 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. работает - но долговато ((.... но работает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 16:48:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar со звездой - да... не подумал.. Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 16:53:22 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
maytonNezarсо звездой - да... не подумал..Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр.Не заморачивайтесь вы с этой звездой. Это был лишь конкретный контрпример на конкретный вопрос, но не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:00:51 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. в общем - протестировал этот вариант на разных рисунка - вроде с задачей справляется. ОГРОМНОЕ СПАСИБО ВСЕМ за ПОМОЩЬ! правда есть одно но - алгоритм долгий - приходится делать большой перебор точек (и как мне кажется - лишних) в пределах ограничивающего прямоугольника. Может можно как то сузить поиск? Например - всегда ли центр описанной окружности будет в круге с центром в центре описывающего квадрата (или средней координате всех точек) и радиусом от него до ближайшей точки в наборе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2010, 15:12:10 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1343600]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 364ms |

| 0 / 0 |
